• XSS 与 CSRF 跨站攻击


    先做个名词解释:

    XSS:跨站脚本(Cross-site scripting)

    CSRF:跨站请求伪造(Cross-site request forgery)

    看了估计也不清楚什么意思吧?

    那么,详细解释下:

    XSS: 其实就是Html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行Html代码。

    一个例子:某文章的评论区,某个攻击者输入一段js代码作为评论:windows.alert("我是攻击者"); , 这段评论提交之后,服务端没有经过严格校验,就直接入库,下次有用户浏览这个文章时,这段评论会加载并作为html、js被浏览器解释执行,然后,用户就看到了“我是攻击者”的弹窗了。

    以上是一个无恶意的攻击例子,如果攻击者有恶意的话。。。获取你的cookie,使用cookie登录你的账户,转账。。

    CSRF:主要利用用户浏览器的cookie来进行的攻击行为。

    假设有恶意网站X,页面上有这么一段代码:

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

    这段代码会尝试从mybank中,往我的账户转账1000元。这个行为大部分情况会失败,因为这个转账接口是需要登录后的授权信息的。但是,

    如果用户先登录了mybank, 然后不小心(比如在qq收到连接并点击了)打开恶意网站X,那么,这个攻击就生效了。登录mybank后,会产生mybank的授权cookie, 网站X请求mybank时,浏览器会带上授权cookie,导致被攻击。

    如何防御

    xss相对比较好防御,只要对输入进行过滤即可,现在很多webframework都提供了输入校验和xss过滤工具

    csrf就不是那么好防御了。它是请求伪造,服务端要识别出这个是伪造的请求是有难度的,这个大概有几个防范思路

    1、提高伪造的难度,比如不要随便通过HTTP GET来提交、操作数据,GET太容易被攻击了。GET方式的url可以轻易被各种途径传播。

    2、服务端增加请求令牌, 这个令牌不写入cookie,每次返回给用户的页面带有这个随机生成的令牌,用户提交数据时,这个令牌作为隐藏域也一同提交,只有验证令牌一致,才可提交成功。嗯,增加了破解难度,但也不是无法破解,可以通过获取htm代码的方式获取令牌。

    3、使用验证码, 这个方式比较安全了, 复杂的验证码不是那么容易破解的,有时候连人自己都认不出来。所以同样的,这种方式也给了用户非常不好的使用体验,慎重使用。

    4、增加referer来源页判断,可以防一些小白(其实很多攻击者都是小白,从这点上看,还是很有效的)。 

  • 相关阅读:
    在from表单中提交同name数据时,怎么获取所有值
    面试题
    String的创建模式
    spring的事务支持
    微信小程序+java实现附件上传以及下载打开详细过程记录
    spring编写AOP代理上的一点小坑
    java静态内部类的作用
    Python学习 :json、pickle&shelve 模块
    Python学习 :正则表达式
    Python学习 :常用模块(四)----- 配置文档
  • 原文地址:https://www.cnblogs.com/moodlxs/p/10338270.html
Copyright © 2020-2023  润新知