0

在过去,当我是一名 Web 开发人员(使用 PHP)时,我曾经在开始任何处理之前通过正则表达式运行所有提交的表单数据。在大多数情况下,我会允许使用字母数字和一小部分标点字符,这将在 99% 的时间内满足 99% 的人,同时提供对 SQL 注入和跨站点脚本的防御(是的,我也使用了 PDO 准备语句)。

最近,我不得不在国际化的环境中处理输入,具体来说,输入可以是多种不同的西欧和东欧语言以及阿拉伯语。在这些情况下,我采取了删除潜在危险字符并让其他所有内容进入的方法。该应用程序的用户数量非常少(少于 10 个),并且仅部署在其内部网络上,因此我并不太担心安全性系统,但我不愿意在可公开访问的网站上采用这种方法。

总之,我希望对输入进行过滤,以便剩下的是“纯文本”,但我不确定如何在国际化上下文中定义纯文本的概念。有没有解决这个问题的 PHP 库?

4

2 回答 2

1

一切都是“纯文本”。甚至 "' DROP TABLE users --" 也是纯文本。甚至 "<script>" 也只是纯文本

您担心的是“特殊字符”,即在某些上下文中具有特殊含义的纯文本。为此,您需要转义这些特殊字符以在给定上下文中“化解”它们。对于 HTML,将它们转义为 HTML 实体。对于 SQL,对字符串进行 SQL 转义(或使用准备好的语句来避免这个问题)。对于 CSV,CSV 转义值......你明白了。总是有可用的函数或库可以为你做这件事,不要试图在这里重新发明轮子。

如果要清理,即删除内容,则需要更好地定义要删除的内容。删除内容也总是冒着删除用户可能想要使用的合法内容的风险。所以这通常是令人讨厌的选择。

有关此主题的更多信息,请参阅伟大的逃避现实(或:使用文本中的文本您需要知道的内容)

于 2012-10-25T10:27:58.320 回答
0

试试 strip_tags()。http://php.net/manual/en/function.strip-tags.php。它适用于大多数英语案例,并且可能适用于不同的语言。

于 2012-10-27T19:42:18.407 回答