以我在小中厂的前端工作经历,XSS 防护从来就像鬼,听过没见过或者说重视程度低。我通过一些技术博客了解到前端方面防护 XSS 主要是对用户输入进行特殊字符过滤转义为 html 实体,对输出的数据进行编码,以及最好的方法是用 html 解析库对输入数据进行解析获取其中数据,然后根据这些数据和白名单重新构建 html 内容。
然后问题就是,具体实践时,前端是要在开发时就要兼顾做到上面这些,还是会有专门负责安全的人员定期检查测试页面安全性并修改前端代码,还是有专门的库可以提供相应的功能
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 攻击。 |
3
enhancer 2018-06-25 17:23:43 +08:00
从输入的角度来讲:
攻击者可以绕过前端直接伪造 http 请求输入包含富文本的内容,所以防范一定是在服务器端做的,只不过后端同学有可能不知道怎样的 html 是合法安全,怎样不安全,需要前端配合告知白名单。 从输出的角度来讲: 前端拿到字符串去页面渲染的时候应该根据业务需要决定哪些标记不能出现,哪些可以,现在的模板渲染都自带了 富文本转义,防止 XSS 攻击。enhancer.io |
4
seancheer 2018-06-25 19:11:28 +08:00
虽然不是前端。但是一般都会有相应的安全部门来扫描测试。
开发自身也需要具备相应的安全知识,写出非常常见的漏洞有的公司是会被通报批评的。 |
5
huilliuh 2018-06-25 19:12:25 +08:00 via Android
xsser 自己扫一边:)
|
6
supermaryy OP @huilliuh 竟然还有这种工具,谢谢,开阔了眼界
|
7
MeteorCat 2018-06-25 20:00:07 +08:00 via Android
防止 XSS 在后端防护比较常见吧
|
8
badcode 2018-06-25 21:15:12 +08:00 via iPhone
input: 前端过滤,入库,后端过滤
output: 后端过滤,输出,前端过滤 |
9
shew2356 2018-06-26 12:16:18 +08:00 via iPhone 1
前后端数据交互的时候 encode 之后,或者 base64 一下,能解决你百分之八十的问题
|
10
nakupanda 2018-06-26 15:06:43 +08:00
我只注意到楼主站在船上拍照
|
11
supermaryy OP @shew2356 是不是前后端数据交互的时候只用 encode 就行,但是输出数据的时候还是要把特殊符号替换为 html 实体,因为 decode 出来的字符串还是包含</>这些特殊符号,不替换的话恶意代码还是会执行?
|
12
shew2356 2018-07-01 20:08:47 +08:00 via iPhone
@supermaryy 可以这么理解,数据还可以加密传输,意思是后端解数据的时候,必须 decode 或者解码,就算有恶意执行代码,在后端解析的时候就被拦截了,所以能达到目的
|