Web Security | 青训营笔记

136 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第6天
本节课包括:XSS攻击与防护、DoS攻击与防护、CSRF攻击与防护、Injection注入攻击、HTTP协议与数字签证等,需要对网络编程知识有一定基础
XSS攻击

  • XSS是通过浏览器对网站页面插入恶意交互脚本获取其他用户浏览器当前渲染的账户信息。

  • XSS利用网页对用户提交信息的盲目信任像服务器传输脚本木马攻击。

  • XSS通常伪装成网站类似UI如弹窗表单,诱骗用户点击/填写表单,切去token/cookie等用户隐私,而且通常暗地执行脚本,难以从UI上察觉。

            通过数据库注入,将恶意脚本伴随输入框插入数据库中。
            定时访问页面,读取数据库数据发送到指定服务器。
            存储式XSS使危害最大的XSS攻击
            
            fetch("/submit",{
                body:JSON.stringfy({
                    id:"1",
                    content:"<script>alert(“XSS”);</script>":
                });
            });
            
           
       //响应式XSS
           
             //直接从URL上携带参数攻击,涉及数据库
             public async render(e){
                 const {params} = e.query;
                 e.status = 200;
                 e.body = '<div>${params}</div>'
                 }
              
             
       //基于DOM的XSS
           const content = new URL(location.href).searchParmas.get("params");
           const div = document.createElement("div");
               div.innerHTML = content;
               documnet.body.append(div);
               
      
            
            <noscript>
                <p title= "</noscript><img src=x onError=alert{1}>">
             

CSRF攻击
伪跨站攻击
SQL Injection攻击
看见SQL大概就想到数据库了吧
没错 这是数据库注入攻击

  
  public async render(e){
      const {account,dataForm} = e.query;
      const res = await sql.query(`
          SELECT a,b,c FROM table
          WHERE account = ${account}
          AND list = ${dataForm}
      `);
      e.body = render(res);
      }
   //请求api用书写字符串请求应该注意 过滤
   public async render(e){
       const{img,option}=e.request.body;
       exec(` convert-cli ${img} -o ${gif}`);
       e.body = "ok";
   }
   fetch("/api",{
       method: "POST",
       body:JSON.stringfy({
             option : `‘ && rm -rf xx`
           })
   })
   
   //注入攻击者通常也会瞄准服务器的系统文件
   
       /etc/passwd 
       /etc/shadow
       ./ssh
       /etc/nignx/nignx.conf  //流量攻击
       ...
   
   //

DoS攻击
普通人也知道()过载请求使得服务器资源被过度消耗而崩溃

        const nogreedy = /a+?/ ;
       const e  = "XXX" ;
       console.log(e.match(greedy)[0]);
       console.log(e.match(nogreedy)[0])

XSS防御 永远不要信任用户提交的内容,即不要直接将用户内容转为动态DOM,而是用String形式储存。
当用户应用需求需要使用到动态DOM时间,应该设置逻辑对上传DOM和解析DOM进行转义 / new DOMOarse()
对于svg文件的上传应该尤其的注意防护,svg文件可以内嵌js脚本
尽量不要允许用户自定义跳转(JS)、自定义样式也不行 CSRF安全防御
Token防御
SQL防护
IP白名单
DoS攻击
ReDoS 校验
L-DoS 限流
DDos CDN
中间人 HTTPS
()请大家注意防护哦