[轉載][網絡整理]web 防止xss注入

原文地址:(雲棲社區)https://yq.aliyun.com/articles/41576

2016-05-11 10:25:03

Java Web中如何防止xss 注入呢? 
首先討論第一個問題:存到數據庫中的是轉碼之後的還是轉碼之前的? 
結論是:存到數據庫中的就是轉碼之前的.爲什麼呢? 因爲xss 攻擊只存在PC web端,
如果數據庫中存儲的就是轉碼之後的,那麼手機app顯示出來不就有問題了麼? ...

Java Web中如何防止xss 注入呢?
首先討論第一個問題:存到數據庫中的是轉碼之後的還是轉碼之前的?

轉碼之後:
<script>alert('中招了')</script>
轉碼之前:
<script>alert('中招了')</script>

結論是:存到數據庫中的就是轉碼之前的.爲什麼呢?
因爲xss 攻擊只存在PC web端,
如果數據庫中存儲的就是轉碼之後的,
那麼手機app顯示出來不就有問題了麼?

所以最終的做法就是在PC web端 轉碼:
function escape(str) {
	str = str ? str : '';
	return str.replace(/</g, "\x26lt;").replace(/>/g, "\x26gt;").replace("/\x26/g", "\x26amp;").replace(/"/g, "\x26quot;");
};

function unescape(str) {
	str = str ? str : '';
	return str.replace(/</g,
		"\x3c").replace(/>/g, "\x3e").replace(/&/g, "\x26").replace(/"/g, '"');
};

<body>
	<div><script>alert(0)</script></div>
	<div><script>alert(1)</script></div>
</body>
注意:
在Java 後臺也不要轉碼,
在PC web端顯示內容的時候轉碼,而且只在顯示((由別的用戶輸入的字段時)))轉碼

補充:
關於1F的評論:
對於想要惡意注入的用戶,在客戶端轉碼,很輕鬆的就會被繞過了。

沒錯,會改腳本的惡意用戶能夠把惡意代碼通過輸入框上傳到服務器,
但是,只要我們在頁面綁定數據的時候escape(str),瀏覽器用戶並不會被str的內容攻擊(個人理解)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章