常见的 web 攻击方式有哪些

常见的 web 攻击方式有哪些,简述原理?如何预防?(百度后收录,侵删)

SQL注入

上学的时候就知道有一个“SQL注入”的攻击方式。例如做一个系统的登录界面,输入用户名和密码,提交之后,后端直接拿到数据就拼接 SQL 语句去查询数据库。如果在输入时进行了恶意的 SQL 拼装,那么最后生成的 SQL 就会有问题。但是现在稍微大型的一点系统,都不会这么做,从提交登录信息到最后拿到授权,都经过层层的验证。因此,SQL 注入都只出现在比较低端小型的系统上。

XSS攻击

前端最常见的攻击就是 XSS(Cross Site Scripting,跨站脚本攻击),很多大型网站(例如 FaceBook 都被 XSS 攻击过)。举一个例子,我在一个博客网站正常发表一篇文章,输入汉字、英文和图片,完全没有问题。但是如果我写的是恶意的 js 脚本,例如获取到document.cookie然后传输到自己的服务器上,那我这篇博客的每一次浏览,都会执行这个脚本,都会把自己的 cookie 中的信息偷偷传递到我的服务器上来。

预防 XSS 攻击就得对输入的内容进行过滤,过滤掉一切可以执行的脚本和脚本链接。大家可以参考xss.js这个开源工具。

简单总结一下,XSS 其实就是攻击者事先在一个页面埋下攻击代码,让登录用户去访问这个页面,然后偷偷执行代码,拿到当前用户的信息。

CSRF/XSRF

还有一个比较常见的攻击就是 CSRF/XSRF(Cross-site request forgery,跨站请求伪造)。它是借用了当前操作者的权限来偷偷的完成某个操作,而不是拿到用户的信息。例如,一个购物网站,购物付费的接口是http://buy.com/pay?id=100,而这个接口在使用时没有任何密码或者 token 的验证,只要打开访问就付费购买了。一个用户已经登录了http://buy.com在选择商品时,突然收到一封邮件,而这封邮件正文有这么一行代码\<img src=”http://buy.com/pay?id=100"\/>,他访问了邮件之后,其实就已经完成了购买。

预防 CSRF 就是加入各个层级的权限验证,例如现在的购物网站,只要涉及到现金交易,肯定输入密码或者指纹才行。