什么是csrf和xss,怎么防范它

xss攻击

xss本质是html注入,和sql注入差不多. SQL,HTML,人类语言都是指令和数据混在一起的,都存在注入风险(程序根据分隔符,标签识别指令和数据,人类则是根据语境,语义和日常经验判断)
比如注册用户时,用户输入"张三"并提交,服务端会生成"

<p>欢迎新用户,张三</p>

"传给浏览器.如果用户输入

<script>alert('逗你玩')</script>

服务端就会生成

<p>欢迎新用户,<script>alert('逗你玩')</script></p>

输入用户内容就会被浏览器识别为指令执行,这就是xss注入;
攻击者也是根据这个原理,输入一个有特殊语义的名字,被其他客户端识别为指令,从而完成了一次漂亮的存储型xss注入式攻击.

csrf攻击

Cross-site request forgery

假设网站中有一个通过 Get 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口

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

如果接口是 Post 提交的,就相对麻烦点,需要用表单来提交接口

<html>
    <head>
        <script type="text/javascript">
            function steal()
                {
                &emsp; iframe = document.frames["steal"];
                iframe.document.Submit("transfer");
            }
        </script>
    </head>

    <body onload="steal()">
        <iframe name="steal" display="none">
            <form method="POST" name="transfer"&emsp;action="http://www.myBank.com/Transfer.php">
                <input type="hidden" name="toBankId" value="11">
                <input type="hidden" name="money" value="1000">
            </form>
        </iframe>
    </body>
</html>

如何防御

防范 CSRF 可以遵循以下几种规则:

  1. Get 请求不对数据进行修改
  2. 不让第三方网站访问到用户 Cookie
  3. 阻止第三方网站请求接口
  4. 请求时附带验证信息,比如验证码或者 token

防抓包

使用HTTPS(HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。)替换HTTP,对传输的数据进行加密,这样,当请求的信息被抓包工具抓包后,也无法修改提交的数据。

猜你喜欢

转载自blog.csdn.net/weixin_37722222/article/details/81558446