热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

常见的web安全问题总结

we安全对于web前端从事人员也是一个特别重要的一个知识点,也是面试的时候,面试官经常问的安全前端问题。掌握一些web安全知识,提供安全防范意识,今天就会从几个方面说起前端web

we安全对于web前端从事人员也是一个特别重要的一个知识点,也是面试的时候,面试官经常问的安全前端问题。掌握一些web安全知识,提供安全防范意识,今天就会从几个方面说起前端web攻击和防御的常用手段

常见的web攻击方式  

  1.XSS

    XSS(Cross Site Scripting)跨站脚本攻击,因为缩写和css重叠,所以能叫XSS,跨脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内非法的非本站点HTML标签或Javascript进行一种攻击。

    跨站脚本攻击有可能造成以下影响

      1.利用虚假输入表单骗取用户个人信息

      2.利用脚本窃取用户的COOKIE值,被害者在不知情况的下,帮助攻击者发送恶意请求

       3.显示伪造的文章活图片

    XSS攻击分类:

      反射型 -url参数直接注入   

普通 http://localhost:3000/?form-china
 alert尝试
  http://localhost:3000/?form=slert(1)  如果有弹出,说明网站有漏洞,黑客就可以对网站发送攻击
 

      获取COOKIE     

        通过访问你的网址,在url参数攻击,获取到COOKIE域名伪造 https://dwz.cn/    用盗取的网址,修改一个简易的网址,发送攻击,也能访问,信息也能保存,又称伪装型网站 伪造COOKIE入侵,

     存储型 存储到DB后读取注入

      跨脚本注入,通过脚本注入代码。用户比如发送评论,用户的信息都会在黑客网站显示,就可以拿到你所需要的数据

   XSS攻击的危害-Scripting能干啥就能干啥  

      1.获取页面数据
                      2.获取COOKIEs
                      3.劫持前端逻辑
                      4.发送请求
                      5.偷取网站的任意数据
                      6.偷取用户的资料
                      7.偷取用户的秘钥和登录转态
                      8.欺骗用户
   防范手段
    HEAD ctx.set(\'X-XSS-Protection\',0) //禁止XSS过滤
      0:禁止XSS过滤    
      1: 启用XSS过滤(通常浏览器是默认的),如果检测到跨脚本攻击,浏览器将清除页面(删除不安全的部分) mode=block 启用XSS过滤,如果检测到攻击,浏览器将不再会清除页面,而是阻止页面加载report=(Chromium only)=启用XSS过滤,如果检测到跨站脚攻击,浏览器将清除并使用、
    CSP
      内容安全策略(CSP,Content Security Policy)是一个附加的安全层,用于帮助检测和缓解那些类型的攻击,包括跨站脚本(XSS)和数据注入等攻击,这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途
      CSP本质就是建立白名单,开发者明确告诉浏览器那些外部资源可以加载和执行,我们只需要配置规则,如何拦截是由浏览器自己实现的,我们可以通过这种方式来尽量减少XSS攻击 
  
 Content-Security-Policy: default-src \'self\'   只允许加载本站资源
 Content-security-Policy: img-src https://   只允许加载https协议图片
  Content-security-Policy:child-src \'none\'  不允许加载任何来源框架
   例如 ctx.set(\'Content-security-Policy\',\'default-src\')

    黑名单

      用户输入永远不可信任的,最普遍的做法就是转义输入的内容,对于引号,尖括号,斜杠进行转义

                          function escape(str) {
                                                    str = str.replace(/&/g, \'&\');
                                                    str = str.replace(/\'<\');
                                                    str = str.replace(/>/g, \'>\');
                                                    str = str.replace(/"/g, \'&quto;\');
                                                    str = str.replace(/\'/g, "\'");
                                                    str = str.replace(/`/g, \'`\');
                                                    str = str.replace(/\//g, \'/\');
                                                     str = str.replace(/<\/script>/,\'\')       
                                             return str
                                         }

      富文本来说,显然不能通过上面的办法来转义所有字符,因为这样会把需要的格式过滤掉,对于这种情况,通常采用白名单的办法,当然也可以通过黑名单过滤,但是考虑需要过滤的标签和标签属性是在太多,更加推荐使用白名单的方式

    白名单      

             const xss = require(\'xss\')
                      let html = xss(\'

XSS demo

\') 转义成

XSS deom

$lt;script$gt;alert(\'xss\');

   HttpOnly COOKIE

    这是防止XSS攻击窃取用户COOKIE最有效的防御手段,web应用程序设置COOKIE时,将其属性设置为HttpOnly 就可以防止网页的COOKIE客户端恶意Javascript窃取,保护用户COOKIE信息

 设置方法:response.addHeader(\'Set-COOKIE\',\'uid=12;path=/; HttpOnly\')

    2.CSRF

    CSRF(Cross Site Request Forgery),既跨站请求伪造,是一种常见的web攻击,他利用用户以登录的身份,在用户不知情的情况下,以用户的名字完成非法操作

     1.用户登录了站点A,并在本地记录了COOKIE

      2.在用户没有登录除站点A的情况下(也就是COOKIE生效的情况下),访问了恶意攻击者提供引诱危险站点B(B站点需求访问站点A)。

      3.站点A没有做任何CSRF防御

      CSRF危害

        1.利用用户登录状态  

        2.用户不知情

        3.完成业务请求

        4.盗取用户资金(转账,消费)

        5.冒充用户发帖背锅  

        6.损害网站声誉

     CSRF防御

         禁止第三方网站带COOKIE ----有兼容性问题

Referer Check ----Https不发送referer
                   app.use(async(ctx,next)=>{  koa中间件实现
                          await next()
                          const referer = ctx.request.header.referer
                           console.log(\'Referer:\',referer)
                     })
                   对登录注册设置验证码校验 

   3.点击劫持--clickjacking

     点击劫持是一种视觉欺骗的攻击手段,攻击者将需要攻击的网站通过iframe嵌套方式嵌入自己的网页中,并将iframe设置为透明的,在页面中透露出一个按钮诱导用户点击  通过用于各种网站,使用iframe技术,图片点几进入一个其他网址,导致用户信息泄密

    点击劫持防御

       X-FRAME-OPTIONS  是一个HTTP响应头,在现代浏览器有一个很好的支持,这个HTTP响应头就是为了防御iframe嵌套的点击劫持攻击

      该响应头有三个值可选,分别是

         DENY:表示页面不允许通过iframe的方式展示

        SAMEORIGIN:表示页面可以在相同域名下通过iframe的方式展示

        ALLOW-FRO:表示页面可以在指定来源的iframe中展示

                               

              现在实现方式: ctx.set(\'X-FRAME-OPTIONS\',\'DENY\')
     以上代码的作用就是当通过iframe的方式加载页面时,攻击者的网页直接不显示所有内容了

  4.SQL注入

     攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。   

     例如: \'or\'1 \'=\' 1  填写特殊密码
            拼接后的sql
      SELECT *

          FROM test.user

          WHERE username = \'xiaozhou\'

           AND password= \'1\' or  \'1\' = \'1\'

         老的后台数据库登录,黑客尝试使用1\' or  \'1\' = \'1相等于密码,去登录

     防御 

      所有的查询语句建议使用数据库提供的参数查询接口**。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中,既不要直接拼接SQL语句,例如node.js中的mysqlis库query方法中的?占位符参数

错误的写法
              cosnt sql = `
                        SELECT *
                        FROM test.user
                        WHERE username = \'${ctx.reuqueset.body.username}\'
                        AND password= \'${ctx.reuqueset.body.password}\' `
              console.log(\'sql\',sql)
              res = await query(sql)
         正确的写法
              const sql = `
                         SELECT *
                         FROM test.user
                         WHERE username = ?
                         AND password= ?  `
              console.log(\'sql\',sql)
         res = await query(sql.[ctx.request.body.username,ctx.reuqueset.body.password])    
       1.严格限制web应用的数据库的操作权限**,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度减少注入攻击对数据库的危害
             2.后端代码检查输入的数据是否符合预期**,严格限制变量的类型,例如使用正则表达式进行一些匹配处理
             3.对进行数据库的特殊字符串(\',",\,>,<,&,%,等等)进行转义处理,后者编码转换。基本所有的后端语言都有对字符串进行转义处理的方法,比例,loads的lodaash_escapehtmlchar等

  5.OS命令注入

    os命令注入和sql注入差不多,只不过SQL注入是针对数据库的,而OS命令注入是针对操作系统的,OS命令注入攻击者指通过web应用,执行非法的操作系统命令达到攻击的目的,只要在你让那个调用Shell函数的地方就有存在被攻击的风险,倘若 调用shell时存在疏漏,就可以执行插入非法命令

      

            以node.js为例,假如在接口中需要从github下载用户指定的repo
              const exec = require(\'mz/child_process\').exec;
              let params = {/*用户输入的参数*/}
              exec(`git clone ${params.repo} /some/path`)
              如果传入参数是会怎么样
              https://github.com/xx/xx.git && rm -fr /* &&                

 

  6.请求劫持

    DNS劫持

      顾名思义,DNS服务器(DNS解析各个步骤)被篡改,修改了域名解析的结果,使得访问的不是预期的ip

     HTTPS劫持

      运营商劫持,此时大概就只能升级为HTTPS了

  7.DDOS    

                    

    http://www.ruanyifeng.com/blog/2018/06/ddos.html 阮一峰文档说

    DDOS不是一种攻击,而是一大类攻击的总称,它有几十张类型,新的攻击方法还不断发明出来,网站运行各个环节,都可以是攻击目标,只要把一个环节攻破,使得整个流程、跑不起来,就得到瘫痪服务的目的

    其中,比较常见的是一种攻击是cc攻击,他就是简单粗暴地送来大量的正常请求,超出服务器的最大承受量,导致死机,

    比如遭遇cc攻击,最多的时候全世界大概20多个ip地址轮流发出请求,每个地址请求量在每秒200次-300次,我看访问日志的时候,就觉得请求像洪水一样涌来,一眨眼就是一大堆,几分钟的时候,日志文件的体积就大了100MB,

     常见的攻击方式

      SYN Flood

        此攻击通过目标发送具有欺骗性源ip地址的大量TCP 初始链接请求SYN数据包来利用TCP握手,目标机器相应每个链请求,然后等待握手中的最后一步,这一步从未发生过,耗尽了过程中的目标资源

      HTTP Flood

         此攻击类似于同时在多个不同计算机上反复按web浏览器中的刷新,大量HTTP请求泛滥服务器,导致拒接服务 

     防御手段

      备份网站

        备份网站不一定是全功能的,如果能做到全静态浏览,就能满足需求,最低限度应该可以显示公告,告诉用户,网站出看问题,正在全力抢修

      HTTP请求拦截

         硬件,服务器,防火墙   带宽扩容     + CDN  提高犯罪成本 

防范方法

  1.密码安全  

    泄露渠道

      数据库被偷   服务器被入侵   通信被窃听      内部人员泄露     其他网站

     防御密文-明文无法反推  

      严禁明文存储   单向变换  变换复杂度要求  密码复杂度要求  加盐(仿拆解)  雪崩效应-明文小幅度   密文剧烈变化  密文固定长度 md5 sha1

      密码传输安全

      https传输  频次限制  前端加密意义有限-传输层加密,不会泄露,但不代表不能登录

     摘要加密的复杂度

         md5反查,用node启动了一个本地服务,使用node提供的crypto对密码加密

     

     虽然对密码加密了,但是我们设置的过于简单,通过md5反查,不到1秒就能查到密码

    

      https://cmd5.com/ 密码设置太过简单,就可直接通过这个地址查询到自己的密码,密码设置数字加英文就不会当场查询出来,需要付费就可以查询出来了 如果设置数字,英文,字符串,就查询不到

 

  2.人机验证 与 验证码

    加强登录验证,防止黑客盗刷,导致服务器奔溃

    

 

 

      滑动验证码实现原理  

          1.服务端随机生成抠图和带有抠图阴影的背景图片,服务端保存随机抠图位置坐标

           2.前端实现滑动交互,将抠图拼在抠图阴影之上,获取用户滑动距离值。

           3.前端将用户滑动距离值传入服务端,服务端校验误差是否在允许范围之内

   3.HTTPS配置    

      HTTP弱点

       危害    

        窃听---密码 敏感信息

        篡改--- 插入广告 重定向其他网站

      时代趋势

       目前全球互联网正在从HTTP向HTTPS的大迁移

       Chrome和火狐浏览器将对不采用HTTPS加密的网站提示不安全

         苹果要求所有APP通信必须采用HTTP加密     

       小程序强制要求服务器端使用HTTPS请求

       特点 

      保密性(防泄密)

      完整性(防篡改)

      真实性(仿假冒)

       什么是SSL证书    

      SSL证书由浏览器中受信任的根证书颁发机构在验证服务器身份后颁发,具有网站身份验证和加密传输双重功能

       密码学           

        对称加密、

          对称加密的一大缺点是秘钥的管理和分配,话句话说,如何把秘钥发送到需要解密你的消息的人的手里是一个问题,在发送秘钥的过程中,秘钥有很大的风险会被黑客们拦截,实现中通常的做法是将对称加密的秘钥进行对称加密,然后传送给需要他的人

        不对称加密

           产生一对秘钥  公钥负责加密  私钥负责解密  私钥无法解开说明公钥无效---抗抵抗  计算复杂对性能有影响

    SSH公钥登录原理 

      

      密码口令登录

         通过密码进行登录,主要流程为

          1.客户端连接上服务器之后,服务器吧自己的公钥传给客服端

          2.客服端输入服务器密码通过公钥加密之后传给服务器 

           3.服务器根据自己的私钥解密登录密码,如果正确那么久让客户端登录

       公钥登录

         公钥登录是为了解决每次登录服务都要输入密码的问题,流行使用RSA加密方案,主要流程包括  

          1.客户端生成RSA公钥和私钥

          2.客户端将自己的公钥存放到服务器

          3.客户端请求连接服务器,服务器将一个公钥加密随机字符串发送给客户端

           4.客户端根据自己的私钥加密这个随机字符串之后再发送给服务器

          5.服务器接收到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝

      SSL证书分类

        1.入门级DCSSL -域名有效,无门槛

        2.企业级OVSSL-企业资质 个人认证

         3.增强型EVSSL-浏览器给予绿色地址显示公司名字

  4.Session管理 

   对于COOKIE的安全管理,其重要行是不言而喻的。特别是对于动态的wen应用,在如HTTP这样的无动态协议的之上,他们需要使用COOKIE来维护状态

   COOKIE标识     

      secure 这个属性告诉浏览器,仅在请求是通过HTTPS传输时,才传递COOKIE

      HttpOnly 设置这个属性将禁止Javascript脚本获取到这个COOKIE,这可以用来帮助防止跨站脚本攻击.

     COOKIE域

      domain 这个属性用来比较请求URL中服务端的域名,如果域名匹配成功,或者是其子域名,则继续检查path属性

      path 除了域名,COOKIE可用的url路径页可以被指定,当域名和路径都匹配时,COOKIE才会发送请求

      expires 这个属性用来设置持久化的COOKIE,当设置了他以后COOKIE在指定的时间到达之前都不会过期

  5浏览器安全控制

    X-XSS-Protection 防止反射型XSS

     Strict-Transport-security  强制使用HTTPS通信

     CSP

     HTTP响应头Content-Security-Policy 允许站点管理者在指定页面控制用户代理资源,除了少数例外,这条政策将极大的指定服务源,以及脚本端点,这将防止跨站脚本攻击

     

  爬虫技术

   使用cheerio与http和https

   puppeter 无头浏览器技术

  反爬虫技术

    Usre-Agent, Referer ,验证码,验证

    单位时间的访问次数,访问量,限制

    关键信息用图片混交

    异步加载技术

    前度技术限制

      字体乱序加密技术

      将网站的重要字体,将html部分生成图片

       反爬虫最高境界就是Canvas的指纹

 

以上都是对前端安全一些总结,欢迎大佬指点一二


推荐阅读
  • 跨站的艺术XSS Fuzzing 的技巧
    作者|张祖优(Fooying)腾讯云云鼎实验室对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做F ... [详细]
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
author-avatar
6057318491
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有