浏览器端攻击一般性网站
2020-05-12 17:52:41 【
  • xss:cross site scripting(css?)跨站脚本攻击

  • csrf:cross site request forgery 跨站点请求伪造

XSS

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。

比如,网页中有一个可执行脚本的漏洞,用户在登录操作时,会输入用户名和密码(请先忽略https),此时,这个可执行脚本的漏洞可以被利用,如通过url参数注入到网页中,当页面打开时,等同于在执行本站的js,利用js的cookie读取和事件捕捉,就可以取到用户输入后的用户名、密码和cookie信息,再自动发送到攻击者的服务器上记录下来。这样,攻击者就可以拿到你的账号信息了。听上去有些像日志服务嵌入的js,但是这种是直接注入到当前页面的,不受同源策略影响(同域名限制),所以破坏力更为强大。

反射式漏洞

未经验证的用户数据被包含在页面中,客户端代码便能够注入到动态页面中或者混入现在的短网址。 在诱骗点击后跳转到某个游戏网站,用户信息被盗。此类漏洞以人为的散播为主(mail),但是传播能力有限,浏览器(chrome在新版本中增加了对xss的防御)和服务商都会过滤url中的信息来避免传播。

存储式漏洞

服务端允许用户提交此类脚本,以直接保存在服务端,每个浏览此页面的用户信息都会被盗。如我们意见建议中的那个和医生个人网站自己嵌入统计,im等。此类漏洞应用面积最广,伤害最大,只要用敏感标题广泛传播,然后诱骗点击即可,比如微博。浏览器和服务商都无法监测是否和合法请求。这相当于是固化下来的漏洞。

钓鱼事件

这是上述xss的一个变种,是最容易爆发的一类攻击,利用js动态替换内容,将当前访问页替换成网站的标准登录页,并且提示用户为了安全起见或者登录过期,请再次登录,当用户输入用户名和密码后,即发往远程服务器记录,然后继续用户要访问的页面。比如,你正在访问医生的点评页面,突然页面弹出来一个层,提示系统检测到你当前的密码过于简单,让你再输入一次进行校验,当你输入完毕后,再提示你检查结束,可以继续操作了。此时,无论你输入的密码是否正确,你的用户名和密码都将会发送给攻击者的服务器。

CSRF

CSRF跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像XSS,但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不太流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

利用登录用户身份,来进行非授权类的行为,比如支付,发帖,修改密码,修改信息等,简单来说就是代理访问。

任何能够发起http请求的行为都可以记性csrf或者xss,比如js,图片,css加载,flash等。

get会在服务器留下访问日志,而post则是无痕访问,更隐蔽。

所以所有ajax有明确的不能够跨域访问限制,否则天下大乱,除非被访问站点明确授权。

恶意访问/灌水事件

用户A同时登录和网站B和C,则可以利用用户A的登录身份,在用户浏览网站B的某一篇文章时,自动发起对网站C的留言,导致垃圾留言陡增,消耗网站C。

正规化的不正常访问

比如腾讯,360等可以短时间大量聚集海量用户的厂商,可以轻松达到冲死其它网站的目的,比如弹窗中的内容,嵌入目标网站的某篇文章或者某张图片。目标网站瞬时会迎来成百上千倍的访问量增长,直接打死了。

新浪微博XSS受攻击事件

2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。大量用户自动发送诸如:"郭美美事件的一些未注意到的细节","建党大业中穿帮的地方","让女人心动的100句诗歌","3D肉团团高清普通话版种子","这是传说中的神仙眷侣啊","惊爆!范冰冰艳照真流出了"等等微博和私信,并自动关注一位名为hellosamy的用户。 攻击过程:利用短网址服务,传播以上标题的url,因为都是登录用户,用户点击url后会:利用点击着个人帐户自动转发,关注hellosamy用户,发私信给好友传播。详情,请自行搜索:新浪微博xss分析。

如何防御

  • 敏感cookie中增加httponly,来杜绝js访问cookie。

  • 让输入受控,比如表单允许提交数字的,就严格是数字。不允许提交代码。

  • 让输入来源受控,比如在被输入表单中增加一次性访问码(更强势的是水印),提交后校验。

  • 对敏感项强制输入密码,比如支付密码,修改密码等输入原密码等。

  • 变相输入控制,比如在被输入表单中,使用css或者js动态渲染,去掉(或者增加)一个输入项,当机器来访问时,会和正常用户看到的内容不一致,从而来区分是否是正常用户。

  • 在开发和测试过程中要有这个意识,多问问自己开发的程序,是否做了合法性检查?是否会被注入代码?

简单的测试方法

在你能看到的输入框,输入:<script>alert('you got it!');</script> 如果能够弹出js提示框,呵呵。

总之,作为技术人员,要对简单的安全知识有所了解,及时达不到“心中有剑”的程度,起码真出事时,死也知道怎么死的。从现在开始,要有安全意识了。


】【打印关闭】 【返回顶部
上一篇微软发布5月补丁,修复111个安全问.. 下一篇网站服务器如何尽量避免被攻击?