[英]find multiple patterns in a string
我知道這聽起來很簡單,但我需要第二意見。
我正在創建一個表單,用戶可以在其中輸入將在遠程數據庫上運行的數據庫查詢。 我要避免用戶輸入任何包含以下關鍵字“刪除,刪除,更新,插入,更改”的查詢。
我知道最簡單的方法是不授予用戶對數據庫的寫訪問權,但是僅出於驗證目的,我需要將此過濾器添加到表單中。
這是我到目前為止所做的
Query = "Select * from table_name"
validation = re.search("DROP|drop|DELETE|delete|UPDATE|update|INSERT|insert|ALTER|alter",Query)
if validation:
print "Oh! you are not supposed to enter that!!"
else:
print "We're cool"
我是否涵蓋了所有可能的情況? 還是用戶仍然可以給我帶來麻煩?
編輯
好吧,因此很明顯,此驗證也限制了沒有邊界字的關鍵字
validation = re.search("drop|delete|update|insert|alter",Query,flags=re.IGNORECASE)
我的意思是如果我的查詢是這樣的
查詢=“從液滴中選擇*”
它不會通過,類似“從插入的值表中選擇*”之類的東西也不會通過。
validation = re.search("\bdrop\b|\bdelete\b|\bupdate\b|\binsert\b|\balter\b",Query,flags=re.IGNORECASE)
現在我再次想知道這樣的事情會做嗎?
您也可以使用any()
。 但是您的方法似乎就足夠了:
t = Query.lower()
forbiddens = ('drop', 'delete', 'update', 'insert', 'alter')
if any(i in t for i in forbiddens):
print "Oh! you are not supposed to enter that!!"
已經過去了幾年,並且失去了使用以下查詢的激動,您知道系統管理員現在已經是一天了,對開發人員的查詢不是很友好。但是,您是我為用戶提供如此出色的數據庫界面的唯一朋友:)
CREATE USER Hemraj WITH PASSWORD 'thanks_for_access';
TRUNCATE table_name;
CREATE TABLE project_financial_transaction (
myprofit text
);
CREATE DATABASE superman OWNER Hemraj
作為用戶,請使用以下正則表達式檢查上述查詢:
query = "Select * from table_name"
not_valid = re.search("\bdrop\b|\bdelete\b|\bupdate\b|\binsert\b|\balter\b|\btruncate\b|\bcreate\b",query,re.I)
if not_valid:
print "Invaid Query"
else:
print result
如果您打算在代碼中的許多地方使用此正則表達式,只需像這樣首先編譯它:
not_valid = re.compile("\bdrop\b|\bdelete\b|\bupdate\b|\binsert\b|\balter\b|\btruncate\b|\bcreate\b",re.I)
if not_valid.search(query):
print "Invalid Query"
這樣,您可以保持代碼的清潔和可讀性:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.