2010-11-19 61 views
0

我正在做一个聊天室网站,目前用户可以输入他们喜欢的任何内容到输入框并发送给所有在线用户。但是恐怕不安全,一旦有坏人发送恶意html/javascript代码来打破所有其他用户?如何避免恶意发送聊天室应用程序

如何避免这种情况发生?

回答

3

大家都说已经是对的;您需要在将所有数据发送给用户之前对其进行编码。

我只是想补充一点,虽然:确保你做这个编码服务器上,与正在使用的Web框架提供了一个内置的(因此,完善的测试)方法。

不要尝试在客户端的JavaScript中执行此操作;用户可能会输入更多的恶意代码,这会破坏JavaScript本身。

而且,尝试“滚你自己的”编码机制,也没有尝试使用黑名单方法,在那里你尝试找到只有某些“坏”的东西有人能进入,而取代它们。你永远无法猜测所有'坏事'是什么。

你不提你的web框架,但大多数有一个内置的HTML编码整个字符串,该字符串将在浏览器中显示的字面上,无论什么含量是它的功能。

+0

我正在使用flup编写python cgi。你有什么建议吗? – 2010-11-19 15:03:36

1

一种方法可能是将所有的HTML转换为操作码。因此,而不是发送<您发送&lt;

这样的代码将显示为它键入,但不应执行。

2

确保你编码为你发送的所有内容,无论如何你都要这样做。例如,如果用户输入<,则可能希望它显示为<,而不是启动HTML标记。因此,如果将输出结果放在HTML页面中,则需要将其转义为&lt;。这具有防止人们在HTML标签中输入的奇妙效果(并且如果他们不能发送HTML,则发送script标签将会非常棘手)。

最低限度你需要编码,甚至只是为了有输出是正确的(更谈不上防范恶意输出)< =>&lt;& =>&amp;。我总是也做> =>&gt;以及只是为了彻底,因为我总有一天无法想到,不知何故,这很重要。 :-)

1

如果您使用的是PHP,您可以使用strip_tags()这将删除您指定的任何标签,但如果您选择允许它,仍然允许使用一些HTML。

+0

'strip_tags()'可能不是他想要的。例如,有时候人们可能会输入''作为一种'表情',他们在回应某些事情时正咧嘴笑。另外,试图允许一些标签可能充满危险;在几个星期前发生onHover攻击后,请问Twitter。 – 2010-11-19 11:50:30

+0

我只是抛出了我的回答,以防万一这适用于他。也许他不想要任何标签,在这种情况下它并不重要?如果他确实需要一些标签,你仍然可以通过正则表达式或其他一些最小的额外代码去除属性。 – 2010-11-19 15:54:46

相关问题