xss 是常見的跨站指令碼攻擊,而且這種型別的錯誤很不容易被發現或者被開發人員忽視,當然django 框架本身是有這方面的考慮的,比如在模板中自動開啟了 escape, 但事實上,我在改版我的 個人部落格 yihaomenvzoaawn.duapp.com 時,在評論框的地方沒有用到富文字編輯器,而是讓使用者自己輸入內容,如果某個使用者輸入了如下類似的東西:
這是我的評論,
而我在模板中是這樣使用的 }, 由於使用了 safe filter ,所以這裡會直接彈出對話方塊出來。這就是xss 注入了。真實的專案中是不允許出現這樣的情況的,用safe 的目的是為了更好的顯示html標籤等。所以要解決的方式是在後台接收到內容的時候,進行轉義處理,特別是 "< > " 這些符號,以及 單引號,雙引號等,最初,我自己寫了一些替換方法。比如
def checkxss(content):
checked_content = content
checked_content = re.sub(r"&", "&", checked_content,0,re.i)
checked_content = re.sub(r"'", "´", checked_content,0,re.i)
checked_content = re.sub(r'""', """, checked_content,0,re.i)
checked_content = re.sub(r"程式設計客棧nt = re.sub(r">", ">", checked_content,0,re.i)
checked_content = re.sub(r"/", "/", checked_content,0,re.i)
當然在後台處理掉這些,然後儲存到資料庫,再次開啟的時候,在模板用|safe 過濾器,就會還原成原來的樣子,確實沒錯。但問題是我自己畫蛇添足了。因為django 自身有一系列的方法。這些方法在 django.utils.html package中。我用這幾個寫乙個測試.
'''created on 2013-11-21
yihaomen.com
'''from django.utils.html import escape, strip_tags, remove_tags
html_content = """
程式設計客棧
yihaomen.com test
css/style.css" rel="external nofollow" rel="stylesheet" type="text/css" />
content
"""def escape_html(html):
return escape(html);
def stript_all_tags(html):
return strip_tags(html)
def remove_part_tags(html,tags):
return remove_tags(html, tags)
if __name__ == '__main__':
print "====escape all tags*****="
print escape_html(html_content)
print "====remove all tags*****="
print strip_tags(html_content)
print "===remove part tags.*****"
print remove_part_tags(html_content,"script html body")
當然還有更多的方法,可以檢視django的**。 以上的方法可以看到 django 可以很方便的 eacape 所有html標籤,也可以部分 escape html標籤,還可以只保留內容等。確實很方便。
由此可見用 django.utils.html 裡面的東西,足夠應付 xss 注入.
本文標題: django框架防止xss注入的方法分析
本文位址:
防止SQL注入和XSS注入的方法總結
1 在openresty中新增naxsi加強防禦安裝方法 2 防止sql注入的思路和方法1.永遠不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過正規表示式,或限制長度 對單引號和 雙 進行轉換等。2.永遠不要使用動態拼裝sql,可以使用引數化的sql或者直接使用儲存過程進行資料查詢訪問。3.永...
php防止xss攻擊以及sql注入
function safefilter arr value preg replace ra,value 刪除非列印字元,粗暴式過濾xss可疑字串 arr key htmlentities strip tags value 去除 html 和 php 標記並轉換為 html 實體 else else ...
Django防止XSS攻擊的幾種方式
一 什麼是xss攻擊 xss即跨站指令碼攻擊,xss是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web使用者將 植入到提供給其它使用者使用的頁面中。二 防止xss攻擊的兩種方式 1 對單一變數進行轉義過濾。可以使用escape過濾器,無需轉義時使用safe過濾器 例如 a變數為 你好 h...