作为一个网站开发人员安全知识少不了。今天我们来温习一下Xss和Csrf的知识。
Xss 跨站脚本(Cross-site scripting,通常简称为XSS)
1、反射型:用户提交信息后经过服务端(也可以不经过服务端,这里指经过输入后的程序解析)后会执行这段js代码。
例如用户输入一段:
<script>
while(true){
alert("弹 弹 弹");
}
</script>
如果不进行安全过滤那么用户输入此信息之后会一直不停的执行弹窗。也可以通过url传递参数的形式来实现
示例:www.xxxx.com/?a=<script>while(true){alert("弹 弹 弹");}<\/script>
我把这样的url放到某个群里,不明真相的群众点击之后就会一直弹窗不值。当然这个只是个恶作剧,如果是跳转某个页面那是不是就可以获取利益.....
2、存储型:这个是将上述的示例提交到服务端比如我发一个帖子,里面嵌入上述示例的一段代码。如果有人看到了我发布的这个帖子,效果会是和上述的一样。
那如何防范xss攻击?
1、转义用户的内容
HTML:对以下这些字符进行转义:
&:& <:&alt;
>:> ':'
":" /:/
2、Javascript:把所有非字母、数字的字符都转义成小于256的ASCII字符;
3、URL:使用Javascript的encodeURIComponent()方法对用户的输入进行编码,该方法会编码如下字符:, / ? : @ & = + $ #
4、添加用户生成的内容
Javascript:使用textContent或者innerText,而不能使用innerHTML;
jquery:使用text(),而不能使用html();
Csrf 跨站请求伪造(Cross-site request forgery 通常成为Csrf)
用户登录A网站,生成本地Cookie,同一个浏览器直接访问B网站,被B网站的恶意脚本获取了A的Cookie信息以A的身份发起各种请求完成相关操作。
举个比较常规的例子:
小明登录了一家电商网站A下了一笔订单,在没有关闭网站清除登录信息的情况下新开页登陆了B网站,不幸被B站获取了COOKIE信息请求了A网站的订单地址变更请求把地址改成自己的,这样不用花一分钱白得了一个订单。
具体代码自行脑补吧,现在说说如何防范CSRF攻击
1、验证Referer中的域名是否是安全域名,当然有人说Referer也是可以伪造的,没错安全无上限一步一步来。
2、每次访问网站增加验证码,这样虽然有效但是用户体验不好(废弃)
3、One-Time Tokens(每次访问都在页面隐藏于放一个随机加密的字符串用于表单提交时候验证)
如有其他方案欢迎评论补充......