防范 xss 使用 htmlspecialchars 够了吗?

2014-12-13 13:26:33 +08:00
 imxz
php程序。

用户输入数据在存入数据库前 先 htmlspecialchars($data);

前台显示的时候 直接从数据库取出来然后 echo $data;

这样是否ok? 会有哪些潜在的危险 ?

还有什么更好的处理方式 ?

谢谢 !
3663 次点击
所在节点    问与答
12 条回复
kmvan
2014-12-13 13:31:59 +08:00
我认为输入前不用处理(但要注意sql注入),输出前才去处理这样比较好,wp就是这样的。
(貌似我很多回答都拿 WP 做盾牌:D)
imxz
2014-12-13 13:40:43 +08:00
@kmvan 谢谢你的回复。

也就是说数据库中就原样存储用户的输入数据,然后在输出前进行处理?

输入输出前处理有何区别呢 ?
invite
2014-12-13 13:44:43 +08:00
要这么容易,还需要防XSS?
adjusted
2014-12-13 13:51:57 +08:00
直接输出应该不会有问题吧
imxz
2014-12-13 14:03:49 +08:00
@invite 说点有质量的观点比较有意义。
txlty
2014-12-13 14:11:15 +08:00
防xss难点是富文本编辑器。
shuimugan
2014-12-13 14:43:38 +08:00
htmlspecialchars一般只能防范非富文本的内容
要是用了ueditor,tinyMCE之类的富文本编辑器,直接过滤html标签与<>这些敏感字符是不行的,php过滤富文本的库个人推荐htmlpurifier,但是针对富文本的过滤一般比较占用资源,建议入库前过滤
imxz
2014-12-13 15:18:24 +08:00
@shuimugan 非常感谢!
Ryans
2014-12-13 20:04:14 +08:00
DOM XSS 有无了解?
imxz
2014-12-13 20:40:16 +08:00
@Ryans 谢谢 我去了解下
zomco
2014-12-13 23:00:25 +08:00
我的理解是,XSS本质上是输出点存在恶意脚本,输入什么是不用管的,输出点做好敏感字符过滤就可以了。再有,输入时做过滤的话,存到数据库里信息已经有损的了。。。
imxz
2014-12-13 23:07:09 +08:00
@zomco 谢谢你!

我也是认为输入做过滤的话会对信息有损,但是我又考虑到性能,输入只做一次处理就够了,以后显示信息就可以无脑输出,但是把过滤放到输出来处理的话,则每次输出都要处理一次,感觉对性能会有损。

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

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

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

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

© 2021 V2EX