为什么 XSS 的防御,很多人要用前后端 转码、过滤、报错 的方法,直接在前端当做文本显示不香吗?

2020-04-24 17:59:42 +08:00
 moonlord

比如就有人问 XSS 防御,一堆的人说 “转码、过滤、报错”
根本睁着眼,都看不见 V2EX 的输入框就是输入啥,显示啥,毛的转码过滤报错。。。

防止 xss 和 sql 注入而进行非法字符过滤,js 前端有什么几乎一劳永逸的方式?
https://www.v2ex.com/t/665687?p=1#r_8874716

V2EX 的留言接口
https://www.v2ex.com/api/replies/show.json?topic_id=665687

6572 次点击
所在节点    JavaScript
36 条回复
airplayxcom
2020-04-24 18:06:13 +08:00
你可真是个人才
retanoj
2020-04-24 18:10:53 +08:00
其实。。我很赞同前端的问题交给前端解决
SilentDepth
2020-04-24 18:11:47 +08:00
咋又单独开了个帖……

你这个方案是要讲前提的。比如博客平台,自定义挂件功能,就是需要用户自己写 HTML 啊,你不能把 HTML 文本渲染出来啊 = =
huijiewei
2020-04-24 18:15:27 +08:00
简直搞笑,一大片 HTML 编辑器怎么办

innerText 说的人都不知道一样
Cmdhelp
2020-04-24 18:16:00 +08:00
现在得前端又不是早期的前端了,
zhuisui
2020-04-24 18:18:25 +08:00
"topic_id": 665687, "content": "<img onerror=\"alert(111)\"/>", "content_rendered": "&lt;img onerror=\"alert(111)\"/&gt;",

json 里这段是什么,这叫没转码吗。
moonlord
2020-04-24 18:24:39 +08:00
@retanoj 对吧,我就这个意思。而且,数据是啥就应该是啥,明天万一搞 APP 呢,他么数据都被转码了不是扯淡了。。。
moonlord
2020-04-24 18:25:40 +08:00
@huijiewei HTML 编辑器不是普遍需要。讨论的是通用的防御。
jinmaoi
2020-04-24 19:50:25 +08:00
我看下面好多人的都误解你的意思啊,都在说什么过滤被绕过,被发包之类,还有个家伙说别人没做过黑客什么的,我就觉得如果是通用一点的照你这种过滤输出是挺方便的啊.
moonlord
2020-04-24 20:23:48 +08:00
@jinmaoi 那些人可能说的是 sql 注入(笑),我也觉得 xss 照我说的这个没啥毛病
sagaxu
2020-04-24 20:41:06 +08:00
为什么要防御 xss,
billlee
2020-04-24 21:10:27 +08:00
其实就是输入转义和输出转义的区别。首先过滤是不太好的,粗暴过滤是破坏功能的。输入过滤的好处是一劳永逸,坏处是如果一份数据除了 web 显示,还有其它用途,做转义就会破坏数据;有些公司的安全部门也会要求输入时做转义或过滤。现在很多框架组件都是显示时默认做转义的,这样也很安全。
mxT52CRuqR6o5
2020-04-25 00:51:44 +08:00
讨论 xss 我就默认是在类似富文本的需求如何解决
普通输入框在我这必定是 innerText 没有讨论空间
aawei
2020-04-25 01:27:37 +08:00
一般的内容,前端当转义一下当文本输出就行,在 script 里输出点,需要特别注意一下某些特殊字符。富文本的话,后端做标签白名单,禁用动作事件,然后再输出到前端渲染。一直都是这么建议开发小哥这样修复的
Hyduan
2020-04-25 02:53:46 +08:00
简单文本渲染情况 我支持楼主 不仅能防止 XSS 还可以保障用户体验
falcon05
2020-04-25 06:10:53 +08:00
如果是传统后端渲染,直接是什么就什么输出,不经过转码,就把 script 输出页面了,xss 还没轮到你的 js 处理就执行了,怎么搞?前后端分离的情况讨论前端 xss 过滤可能还有意义。
Archeb
2020-04-25 07:52:28 +08:00
楼主是不是最近前后端分离的 SPA 写多了,前端 API 调多了才会产生后端渲染已经没有应用场景的错觉。
hshpy
2020-04-25 09:16:46 +08:00
过滤要后端做,DOM 型 XSS 是 js 动态加载 html 。
你的网站做成只显示 txt 文件?
hshpy
2020-04-25 09:18:40 +08:00
@hshpy 还有存储型 xss,用户体验不打算要了
wy315700
2020-04-25 09:24:52 +08:00
吃饭容易噎着怎么办。

那就不吃饭喽。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665769

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX