在MySQL存储的HTML 100%安全的方式(闭合)(100% safe way of stori

2019-07-30 12:46发布

我工作的地方公共(所以每个人)被允许通过TinyMCE的为自己的项目页面中插入HTML的项目。 由于每个用户都可以使用此功能,我需要插入TinyMCE的输出到我的数据库,并将其显示在另一页上只因为它是由用户插入的100%安全的方式。

XSS,SQL注入和所有其他的废话是不是我想要在我的新网站是什么! 我能做ヶ辆 - >用htmlspecialchars后来就用htmlentities_decode,但是这是100%安全的,这是做的最好的方法是什么?

Answer 1:

SQL注入是与使用预处理语句很容易避免大多数情况下。

XSS是比较困难的,如果你打算允许用户发布HTML标记。 您需要删除所有<script>标记,所有on*从标签属性,所有javascript:网址,而且当时这可能不能得到充分保证,使输入HTML安全。 有库,比如HTMLPurifier ,可以帮助,但只要你允许HTML,你在让一些恶意通过的风险。

你可以使用实现的东西,例如降价或wikitext的,而不是一个图书馆。 哪些用户可以进入,同时还让他们这严重限制了标记内容在一定程度上。 这不是fullproof(人们仍然可以只发布链接到恶意网站,希望用户通过点击它们,其中一些将是天真的,足以实际上做),你就不能使用富文本编辑器如TinyMCE的没有某种插件,但它是一个更简单的工作来净化降价比它是处理HTML。



Answer 2:

这是不可行的。 你想过滤所以这是一个很好的点,但最终它是不可能的,如果你接受HTML到完全锁定下来。 看看之类的bbcode,降价等看到一些替代品。

如果你决定接受HTML代码,它不只是过滤需要做什么,甚至可编码产生严重的安全问题。 搜索UTF-7例如,看看有什么样的问题。 看到一些例子在这里: http://www.webappsec.org/projects/articles/091007.txt



Answer 3:

存储和显示HTML是两回事。

对于存储在MySQL中的HTML, mysql_real_escape_string()是不够的,可以保护您免受SQL注入。

为了显示 ,这取决于。 您希望用户能够编写HTML,但要得到保护,免受XSS攻击和这样的,所以你应该使用像HTMLPurifier过滤器(这是#1做什么)。 你只需要做到这一点,一旦你从中检索数据库中的HTML。

你永远需要使用htmlentities()htmlentities_decode()



文章来源: 100% safe way of storing html in MySQL [closed]