我经营一个自己写的网站(有点像社交网络).我允许成员互相发送评论.在评论中; 我接受评论然后调用此行,然后将其保存在数据库中..
$com = htmlentities($com);
当我想要显示它; 我把这段代码称为..
$com = html_entity_decode($com);
这在大多数情况下效果很好.它允许用户复制/粘贴youtube/imeem嵌入代码并相互发送视频和歌曲.它还允许他们将图像上传到photobucket并复制/粘贴嵌入代码以发送图片注释.
我的问题是,有些人基本上都在那里放入javascript代码,往往会做一些令人讨厌的东西,比如打开警报框,更改网页的位置和类似的东西......我正在努力找到一个很好的解决方案来解决这个问题一劳永逸..其他网站如何允许这种功能?
感谢您的反馈意见
首先:htmlentities
或者只是htmlspecialchars
用于转义嵌入HTML的字符串.将它们插入SQL查询时,不应该使用它来转义字符串 - 使用mysql_real_escape_string
(For MySql)或更好 - 使用带有绑定参数的预处理语句.magic_quotes
手动转义字符串时,请确保已关闭或禁用.
第二:当你再把它拉出来时,你不会忘记它们.例如.没有mysql_real_unescape_string
.你也不应该使用stripslashes
- 如果你发现你需要,那么你可能已经启用了magic_quotes - 转而关闭它们,并在继续之前修复数据库中的数据.
第三:你正在做的事情html_entity_decode
完全取消了它的预期用途htmlentities
.现在,您绝对无法防止恶意用户将代码注入您的网站(您很容易受到跨网站脚本攻击,即XSS).嵌入到HTML上下文中的字符串应该使用htmlspecialchars
(或htmlentities
)进行转义.如果您必须将HTML嵌入到页面中,则必须先通过清理解决方案运行它.strip_tags
这是理所当然的 - 但在实践中它是非常不合适的.我目前所知道的最好的解决方案是HtmlPurifier.但是,无论您做什么,让随机用户将代码嵌入您的网站始终存在风险.如果可能的话,尝试设计您的应用程序,使其不需要.