php - 我觉得写的代码98%都是操作字符串的,关心的问题就是字符串从哪儿来,然后把它保存到哪儿去,然后怎么显示给用户
ringa_lee
ringa_lee 2017-04-10 16:26:50
[PHP讨论组]

我觉得写的代码98%都是操作字符串的,关心的问题就是字符串从哪儿来,然后把它保存到哪儿去,然后怎么显示给用户,所以我问个数据保存的问题,在数据库中怎么保存呢?

现在的动态网站,“动态内容”已经离不开html了, 而html来自于用户又会不安全,给我们防护造成困难,而如果使用“不给用户提供富文本编辑器”那整个网站出来模板内容以外,其它的内容除了文本就是文本,文章中没有图片,没有样式,清一色的文本,所以我们还是要依赖于富文本。

可是现在我有一个疑问,比如一个文章表tb_article(id,name,content),我们允许用户发布带有图片视频等媒体的文章,那么现在我有一个疑问:

用户post过来的内容是什么我们不管,我们服务器怎么处理这些数据,然后在数据库中该怎么保存呢?

我们假定一篇文章名可以为:

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
伊谢尔伦

保存的时候主要防注入,展示的时候才需要防XSS。

像标题这种铁定纯文本的东西你就直接htmlentities或者htmlspecialchars过滤。正文如果要支持富文本你还需要过滤script等敏感标签。一般有白名单标签过滤和黑名单标签过滤两种。

不过还存在别人用\uxxxx字符串绕过htmlspecialchars过滤的问题。

关于你关注的性能问题,很容易用Cache解决,不必太担心。尽量在数据库里保存原始数据,在展示的环节解决XSS问题,如果过滤代码升级了,直接Flush掉Cache就行了。

另外针对现代浏览器你还可以使用CSP声明信任的script等资源域名白名单。

PHPz

编码呀同学~~
你的问题可以转换为:如何防御XSS攻击

巴扎黑

用户输入的明明是&而保存在数据库里面的却是&amp,数据库里面保存的和用户输入时的不一致,这样好吗?

  1. 用户看不到你是怎么存储他的消息的

  2. 你在给用户展示时, 只要你不要再过滤一遍html tags就可以让用户无感知的观察到& 而不是&

  3. 病从口入。

  4. 如果你系统足够强大,或者,你根本不在乎xss,你完全可以不用提这个问题的。

阿神

你需要htmlpurifier

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号