- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我经营着一个我自己编写的网站(有点像社交网络)。我允许成员互相发送评论。在评论中;我接受评论,然后在将其保存在 db 之前调用此行..
$com = htmlentities($com);
当我想显示它时;我称这段代码为..
$com = html_entity_decode($com);
这在大多数情况下都很有效。它允许用户复制/粘贴 youtube/imeem 嵌入代码并互相发送视频和歌曲。它还允许他们将图像上传到 photobucket 并复制/粘贴嵌入代码以发送图片评论。
我遇到的问题是,有些人基本上也在那里输入 javascript 代码,这些代码往往会做一些令人讨厌的事情,例如打开警告框、更改网页位置等等。我正在努力寻找一个好的一劳永逸地解决这个问题的解决方案。其他网站如何允许这种功能?
感谢您的反馈
最佳答案
第一个:htmlentities
或者只是 htmlspecialchars
应该用于转义嵌入到 HTML 中的字符串。当您将它们插入到 SQL 查询中时,您不应该使用它来转义字符串 - 使用 mysql_real_escape_string
(对于 MySql)或更好 - 使用 prepared statements , 具有绑定(bind)参数。当您手动转义字符串时,请确保关闭或禁用 magic_quotes
。
第二:当你再次拉出字符串时,你不会取消转义字符串。例如。没有 mysql_real_unescape_string
。而且你也不应该使用 stripslashes
- 如果你发现你需要,那么你可能已经打开了 magic_quotes - 而是关闭它们,并在继续之前修复数据库中的数据。
第三:您对 html_entity_decode
所做的操作完全抵消了 htmlentities
的预期用途。现在,您完全无法防止恶意用户将代码注入(inject)您的站点(您很容易受到跨站点脚本攻击,也就是 XSS)。嵌入到 HTML 上下文中的字符串应使用 htmlspecialchars
进行转义(或 htmlentities
)。如果您绝对必须将 HTML 嵌入到您的页面中,则必须先通过清理解决方案运行它。 strip_tags
这样做 - 在理论上 - 但在实践中这是非常不充分的。我目前知道的最佳解决方案是 HtmlPurifier .但是,无论您做什么,让随机用户将代码嵌入到您的站点始终是一种风险。如果可能,请尝试将您的应用程序设计为不需要它。
关于php - 如何安全地允许嵌入内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/534121/
我是一名优秀的程序员,十分优秀!