V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
supermaryy
V2EX  ›  程序员

想问大厂前端怎么防 XSS 攻击的? 靠前端写的时候注意,还是有专门的负责安全的人

  •  1
     
  •   supermaryy · 2018-06-25 16:03:05 +08:00 · 9414 次点击
    这是一个创建于 2350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以我在小中厂的前端工作经历,XSS 防护从来就像鬼,听过没见过或者说重视程度低。我通过一些技术博客了解到前端方面防护 XSS 主要是对用户输入进行特殊字符过滤转义为 html 实体,对输出的数据进行编码,以及最好的方法是用 html 解析库对输入数据进行解析获取其中数据,然后根据这些数据和白名单重新构建 html 内容。

    然后问题就是,具体实践时,前端是要在开发时就要兼顾做到上面这些,还是会有专门负责安全的人员定期检查测试页面安全性并修改前端代码,还是有专门的库可以提供相应的功能

    12 条回复    2018-07-01 20:08:47 +08:00
    luoway
        1
    luoway  
       2018-06-25 16:38:09 +08:00
    前端自己写,然后找专人检查
    有专门的库 jsxss.com
    DOLLOR
        2
    DOLLOR  
       2018-06-25 16:57:56 +08:00
    传统的 jQuery 开发,常常用字符串拼接方式来生成 dom 结构,且不做过滤和转义,是导致 xss 攻击主要原因。
    现代 web 开发框架如 vue.js 、react.js 等,在设计的时候就考虑了 XSS 攻击,对 html 插值进行了更进一步的抽象、过滤和转义。
    如 vue.js 避免使用 v-html,react.js 避免使用 dangerouslySetInnerHTML。可以在大部分情况下避免 XSS 攻击。
    enhancer
        3
    enhancer  
       2018-06-25 17:23:43 +08:00
    从输入的角度来讲:
    攻击者可以绕过前端直接伪造 http 请求输入包含富文本的内容,所以防范一定是在服务器端做的,只不过后端同学有可能不知道怎样的 html 是合法安全,怎样不安全,需要前端配合告知白名单。
    从输出的角度来讲:
    前端拿到字符串去页面渲染的时候应该根据业务需要决定哪些标记不能出现,哪些可以,现在的模板渲染都自带了 富文本转义,防止 XSS 攻击。enhancer.io
    seancheer
        4
    seancheer  
       2018-06-25 19:11:28 +08:00
    虽然不是前端。但是一般都会有相应的安全部门来扫描测试。
    开发自身也需要具备相应的安全知识,写出非常常见的漏洞有的公司是会被通报批评的。
    huilliuh
        5
    huilliuh  
       2018-06-25 19:12:25 +08:00 via Android
    xsser 自己扫一边:)
    supermaryy
        6
    supermaryy  
    OP
       2018-06-25 19:58:48 +08:00
    @huilliuh 竟然还有这种工具,谢谢,开阔了眼界
    MeteorCat
        7
    MeteorCat  
       2018-06-25 20:00:07 +08:00 via Android
    防止 XSS 在后端防护比较常见吧
    badcode
        8
    badcode  
       2018-06-25 21:15:12 +08:00 via iPhone
    input: 前端过滤,入库,后端过滤
    output: 后端过滤,输出,前端过滤
    shew2356
        9
    shew2356  
       2018-06-26 12:16:18 +08:00 via iPhone   ❤️ 1
    前后端数据交互的时候 encode 之后,或者 base64 一下,能解决你百分之八十的问题
    nakupanda
        10
    nakupanda  
       2018-06-26 15:06:43 +08:00
    我只注意到楼主站在船上拍照
    supermaryy
        11
    supermaryy  
    OP
       2018-07-01 10:56:26 +08:00
    @shew2356 是不是前后端数据交互的时候只用 encode 就行,但是输出数据的时候还是要把特殊符号替换为 html 实体,因为 decode 出来的字符串还是包含</>这些特殊符号,不替换的话恶意代码还是会执行?
    shew2356
        12
    shew2356  
       2018-07-01 20:08:47 +08:00 via iPhone
    @supermaryy 可以这么理解,数据还可以加密传输,意思是后端解数据的时候,必须 decode 或者解码,就算有恶意执行代码,在后端解析的时候就被拦截了,所以能达到目的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2595 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.