Web攻击技术及防御措施

HTTP协议本身不存在安全问题,因此协议本身不会成为被攻击的对象,应用HTTP协议的服务器和客户端,以及运行在服务器上的资源才是攻击者攻击的目标。

###跨站点脚本攻击 ####输入输出值转义不完全引发的安全漏洞

  • 客户端输入值有可能带有攻击性意义的代码,输入值验证是指检查是否符合系统业务逻辑的数值或者是检查字符编码等预防对策。
  • 从数据库输出至页面的数据,如果转义不完全时,会触发攻击者传入的攻击代码,而给输出对象带来伤害

跨站点脚本攻击俗称XSS(cross-site scripting)是指通过存在安全漏洞的web网站的注册用户的浏览器内运行非法的HTML标签或者是JavaScript进行的一种攻击。

  • 动态生成的HTML 比如一些个人编辑信息页面,如果用户输入了带HTML标签的字段,点击确认后,这个就会被解析成HTML而不是原本想要的文案。

  • 执行脚本 攻击者布好陷阱,创建一段恶意代码的URL,然后隐藏植入邮件或者web页面中,诱使用户点击该URL

    网站通过地址栏中URL的查询字段指定ID,实现在表单内自动填写字符串功能。链接可能像这样:www.example.com/login?id=123,对于这个请求,渲染的html可能是<input value="123">,但是熟知此漏洞的攻击者,创建了一个www.example.com/login?id="><script>xxx</script><span="的链接,如果用户点击进去,那么渲染出来的html就是<input value=""><script>xxx</script><span="">,就会执行攻击者嵌入的脚本,然后自己的cookie或者登陆信息就会发送到攻击者的web网站。

跨站点脚本攻击属于被动攻击模式,除了用户自己需要提防不要点击这些链接,最根本的还是web开发人员需要从源头遏制。不要信赖用户输入的一切信息,前端和后端之间传递的数据也要持怀疑态度。就像上述情况中,如果后端或者前端能将url中的参数转义之后再渲染到页面中,那么恶意脚本就不会执行。 ###跨站点请求伪造 CSRF(cross-site request forgeries)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的操作,攻击者盗用了你的身份,以你的名义发送恶意请求。属于被动攻击。 下图能简单说明攻击原理 输入图片说明 要完成这此攻击,需要两步:

1、登陆网站A,生成cookie

2、cookie没有过期的情况下访问危险网站B

网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

危险网站B,它里面有一段HTML的代码如下:

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

如果先登陆A,再登陆B网站,你就会发现账户少钱了。

这个是因为img发起了GET请求,有人会说改成POST不就行了吗,POST请求也不一定安全,网站B将img改成一个表单提交,结果还是一样。

CSRF攻击主要是因为Web的隐式身份验证机制,Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。 ####如何防止CSRF

  • 验证 HTTP Referer 字段 Referer字段能记录请求来源,比如要执行A网站的转账功能,必须先登陆A网站,也就是要先访问A网站的登陆页面。如果是用户操作,那么Referer字段是指向登陆页面的,而像上述情况,Referer字段肯定是指向攻击者的网站B了。通过校验Referer来防止CSRF,是一种简单有效的办法,但是存在一些问题:有些浏览器的Referer值可以被更改、有些用户担心会侵犯自己的隐私,设置浏览器不提供Referer。
  • 在请求地址中添加 token 并验证 token 可以在用户登陆后产生并放于 session 之中,请求时将token附在请求地址之后(GET请求)或者在 form 表单的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>(POST请求)发送给服务器,服务器再拿出session中的token 与请求中的 token 进行比对。要对每一个请求都加上 token 是很麻烦的,并且很容易漏掉。
  • 在 HTTP 头中添加token值 和上面将token添加到请求参数中不一样,这种采用将token附加到HTTP头中来达到同样的目的。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,也不用担心 token 泄露到其他网站中去。然而这种方法也有一定的局限性,必须是ajax请求。
  • 验证码 所有请求使用验证码,这个方案是很完美,能确保这个请求一定是用户批准发送的,但是用户体验不够好,所以一般想登陆注册这种重要的接口才使用验证码

###SQL注入

是指对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能会引发极大的威胁,直接导致个人信息及机密信息泄露。

譬如URL中指定了一查询字段q=上野,这个值由前端传给后端,最后执行SQL

SELECT * FROM table WHERE author = '上野' and flag = 1;

显示满足author=上野and flag=1(可售)的数据

攻击者将上述改成q=上野'-- 那么会执行SQL

SELECT * FROM table WHERE author = '上野'--' and flag = 1;

语句中--之后的会被视为注释,and flag 这个条件会被自动忽略。最后尚未出版的书也一并显示出来了。

上面的例子仅仅是把未出版的书显示出来,而实际情况中发生SQL注入时,很有可能会导致用户信息等内容遭到篡改,从而使用户遭受损失。 ###总结 了解XSS、CSRF、SQL注入,还有暴力破解,Ddos攻击等Web攻击技术,是为了找到更好的防御措施,通过有效的方法把风险降到最低。作为开发人员,一定要严格要求自身。

转载于:https://my.oschina.net/u/3643736/blog/1515174

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值