2011-03-14 99 views
0

我被告知使用(python's)cgi.escape()函數來避免sql注入和xss攻擊,儘管我確信django會自動轉義變量。閱讀這些攻擊,在我看來,分號的作用對於注入sql和javascript都是至關重要的。然而,cgi.escape似乎沒有對分號進行編碼,而是將其留空。其他較不祥的字符被轉換爲html實體。分號在sql注入和xss攻擊中的作用

這是爲什麼?不會編碼;成≻這樣的東西方便地防止這兩種常見和主要形式的攻擊?

有趣的是,我一直無法找到一個用於分號的html實體。

+0

[使用Python清理用戶輸入]的可能重複(http://stackoverflow.com/questions/16861/sanitising-user-input-using-python) – geoffspear 2011-03-14 02:47:54

回答

3

cgi.escape是用來轉換可能包含&<>字符,這通常是不可見的HTML文檔,到將要顯示HTML實體文本。它與防止SQL注入沒有任何關係,但它可以通過將HTML代碼顯示爲文本而不是將實際的HTML標記插入到顯示的頁面中來幫助阻止XSS攻擊。

您應該使用參數化查詢來避免SQL注入;轉義輸入然後將SQL構建出來很醜陋。

1

將值放入SQL中時,分號有時會成爲問題,但將值放入HTML時不是問題。

cgi.escape()旨在逃避正在放入HTML中的東西,因此只能轉義HTML中的問題。