跨站请求伪造(CSRF)
原理
危害是攻击者可以盗用你的身份,以你的名义发送恶意请求。比如可以盗取你的账号,以你的身份发送邮件,购买商品等
例子
在某个论坛管理页面,管理员可以在list.php页面执行删除帖子操作,根据URL判断删除帖子的id,像这样的一个URL
1 | http://localhost/list.php?action=delete&id=12 |
当恶意用户想管理员发送包含CSFR的邮件,骗取管理员访问 http://test.com/csrf.php 在这个恶意网页中只要包含这样的html语句就可以利用让管理员在不知
情的情况下删除帖子了
1 | <img alt="" src="http://localhost/list.php?action=delete&id=12"/> |
使用post修改信息就安全了么?
1 | <?php |
同样可以攻击
1 | <!DOCTYPE html> |
如何防范
- 使用post,不使用get修改信息
- 验证码,所有表单的提交需要验证码,但是貌似用起来很麻烦,所以一些关键的操作可以
- 在表单中预先植入一些加密信息,验证请求是此表单发送
跨站脚本攻击(XSS)
原理
跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的htm
l代码会被执行,从而达到恶意用户的特殊目的
例子
我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表
1 | <!DOCTYPE html> |
addElement()方法用于添加新的留言,而renderComments()方法用于展留言列表,网页看起来是这样的
因为我们完全信任了用户输入,但有些别有用心的用户会像这样的输入
这样无论是谁访问这个页面的时候控制台都会输出“Hey you are a fool fish!”,如果这只是个恶意的小玩笑,有些人做的事情就不可爱了,有些用户会利用
这个漏洞窃取用户信息、诱骗人打开恶意网站或者下载恶意程序等
如何防范
上面演示的是一个非常简单的XSS攻击,还有很多隐蔽的方式,但是其核心都是利用了脚本注入,因此我们解决办法其实很简单,不信赖用户输入,对特殊字符如”<”,”>”转义,就可以从根本上防止这一问题,当然很多解决方案都对XSS做了特定限制,如上面这中做法在ASP.NET中不幸不同,微软validateRequest对表单提交自动做了XSS验证。但防不胜防,总有些聪明的恶意用户会到我们的网站搞破坏,对自己站点不放心可以看看这个XSS跨站测试代码大全试试站点是否安全。