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的内容攻击(个人理解)