[转载][网络整理]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的内容攻击(个人理解)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章