11

我开发了一个 Web 应用程序,它允许我的用户在 LAMP 环境(debian、apache、php、mysql)中动态管理网站的某些方面(是的,某种 cms)

好吧,例如,他们在我的服务器上的私人区域创建新闻,然后通过 cURL 请求(或通过 ajax)在他们的网站上发布。

新闻是使用 WYSIWYG 编辑器创建的(目前为 fck,未来可能为 tinyMCE)。

所以,我不能禁止 html 标签,但我怎样才能安全呢?我必须删除什么样的标签(javascripts?)?这意味着服务器安全..但是如何“合法”安全?如果用户使用我的应用程序制作 xss,我会遇到一些法律问题吗?

4

10 回答 10

14

如果您使用的是 php,一个很好的解决方案是使用HTMLPurifier。它有很多过滤掉坏东西的选项,并且作为一个副作用,保证了格式良好的 html 输出。我用它来查看可能是敌对环境的垃圾邮件。

于 2009-03-31T15:40:19.877 回答
12

您要删除的内容并不重要,总会有人找到绕过它的方法。作为参考,请查看此XSS 备忘单

例如,您将如何删除这个有效的 XSS 攻击:

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

您最好的选择是只允许一部分可接受的标签并删除其他任何内容。这种做法被称为白名单,是防止 XSS(除了禁止 HTML)的最佳方法。

在你的测试中也使用备忘单;在您的网站上尽可能多地触发并尝试找到一些执行 XSS 的方法。

于 2009-03-31T15:32:34.390 回答
6

这里的一般最佳策略是将您认为安全的特定标签和属性列入白名单,然后转义/删除其他所有内容。例如,一个合理的白名单可能是<p>, <ul>, <ol>, <li>, <strong>, <em>, <pre>, <code>, <blockquote>, <cite>. 或者,考虑使用对人类友好的标记,例如可以轻松转换为安全 HTML的TextileMarkdown 。

于 2009-03-31T15:31:57.713 回答
2

除了允许 HTML,您应该有一些可以转换为 HTML 的其他标记。例如,试图从用户输入中去除恶意 HTML 几乎是不可能的

<scr<script>ipt etc="...">

从中删除将离开

<script etc="...">
于 2009-03-31T15:31:17.573 回答
1

有关stackoverflow使用的白名单方法的 C# 示例,您可以查看此页面

于 2009-03-31T15:42:19.903 回答
1

Kohana 的安全助手很不错。据我记得,它取自另一个项目。

但是我测试了

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

LFSR Consulting 的回答中,它正确地逃脱了它。

于 2009-11-09T01:21:16.240 回答
0

如果删除标签太困难,您可以拒绝整个 html 数据,直到用户输入有效的。如果它包含以下标签,我会拒绝 html:

框架集,框架,iframe,脚本,对象,嵌入,小程序。

您想要禁止的标签还有:head(和子标签)、body、html,因为您想自己提供它们并且您不希望用户操作您的元数据。

但一般来说,允许用户提供自己的 html 代码总是会带来一些安全问题。

于 2009-03-31T15:38:05.530 回答
0

您可能想要考虑,而不是完全允许 ​​HTML,实现一些 HTML 的替代品,如 BBCode 或 Markdown。

于 2009-03-31T15:41:41.217 回答
0

我使用这个 php strip_tags 函数,因为我希望用户可以安全地发布,并且我只允许一些可以在帖子中使用的标签,没有人可以通过脚本注入来破解你的网站,所以我认为 strip_tags 是最好的选择

Clich here 获取此 php 函数的代码

于 2018-01-10T17:39:58.483 回答
-2

我应该复制/粘贴而不是截图的代码

这是php中非常好的功能,您可以使用它

$string = strip_tags($_POST['comment'], "<b>");
于 2018-01-10T17:05:16.453 回答