XSS注入漏洞与CSRF漏洞

最近在笔试的时候遇到这么个问题,我这个自学前端的小白看到直接蒙了=- =,今天去网上查了查,现在把他们记录在这里,时不时的可以看一下,提醒提醒。当然,WEB漏洞可不止这么两个,还有其他的,可以在这里看到。

XSS(Cross-site Scripting)漏洞

  • 这个名字是为了不和CSS重名而混淆。
    描述:Web程序代码中把用户提交的参数未做过滤就直接输出到页面,参数中的特殊字符打破了HTML页面的原有逻辑,黑客可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫传播、篡改页面实施钓鱼攻击等。
    检测方法:通过修改参数来判断是否存在漏洞。
    如:用户输入内容:’a”的时候,合法的显示是:
合法显示

而存在漏洞的页面显示却是:

漏洞显示

修复方案:
1、开发者应该严格按照openid和openkey的校验规则判断openid和openkey是否合法,且判断其它参数的合法性,不合法不返回任何内容。
2、严格限制URL参数输入值的格式,不能包含不必要的特殊字符( %0d、%0a、%0D 、%0A 等)。
3、对于用户输入的参数值展现在HTML正文中或者属性值中的情况,因将不可信内容做出转码,如“< > ' " `”转换成HTML实体。
4、只允许用户输入我们期望的数据。过滤掉JavaScript事件的标签。
5、将重要的cookie标记为http only,这样的话Javascript 中的document.cookie语句就不能获取到cookie了。

CSRF漏洞(Cross Site Request Forgery)漏洞

描述:CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下 执行在权限保护之下的操作。
攻击原理:如图所示,Web A为存在CSRF漏洞的网站, Web B为攻击者构建的恶意网站, User C为Web A的合法用户。

XSS注入漏洞与CSRF漏洞_第1张图片
CSRF攻击原理
  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
    2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  2. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  3. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  4. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

CSRF漏洞检测:最简单的方法是抓取一个正常的请求的数据包,去掉Referer字段后再重新提交,如果该提交依旧有效,那么基本上可以确定存在CSRF漏洞。同样有一些专门针对CSRF漏洞进行检测的工具,如CSRFTester、CSRF Request Builder等。
CSRF漏洞防御

  • 验证HTTP Refere字段,该字段记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自同一个网站。不过,由于Referer是可以伪造的,所以该方法有点不靠谱。
  • 在请求地址中添加token并验证,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息 不存在于Cookie之中。系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。其实把token放在localstorage中就行了,localstorage是html5标准定义的,它不会自动添加到 http请求中,目前主流浏览器都支持。

以上内容都是取自网上各路大佬写的内容,有些内容已经有些年了,可能放在如今已不适用,在之后的学习与工作中要注意咯。

参考地址:
腾讯开放平台
《新IT领航》2012,第二十三期

你可能感兴趣的:(XSS注入漏洞与CSRF漏洞)