在我成为Web开发人员(使用PHP)的过去,我曾经在开始任何处理之前通过正则表达式运行所有提交的表单数据。在大多数情况下,我会允许使用字母数字和一小组标点字符,这些字符在99%的时间内可以满足99%的人,同时提供防止SQL注入和跨站点脚本(是的,我也使用了PDO预处理语句)。
最近,我不得不在国际化背景下处理输入,特别是在输入可以是几种不同的西欧和东欧语言以及阿拉伯语的情况下。在这些情况下,我使用了删除潜在危险的角色并让其他所有内容进入。该应用程序的用户数量非常少(少于10个)并且仅部署在其内部网络上,所以我并不过分关注其安全性。系统,但我不习惯在一个可公开访问的网站上采取这种方法。
总之,我希望对输入进行过滤,以便剩下的是“纯文本”,但我不确定如何在国际化的上下文中定义纯文本的概念。是否有任何PHP库可以解决这个问题?
答案 0 :(得分:1)
一切都是“纯文本”。甚至“'DROP TABLE用户 - ”也是纯文本。甚至“< script>”只是 纯文本 。
你担心的是“特殊字符”,即在某些情况下具有特殊含义的纯文本。为此,您需要转义这些特殊字符以在给定的上下文中“解除”它们。对于HTML,将它们转义为HTML实体。对于SQL,SQL-escape字符串(或使用预处理语句来避免一般的这个问题)。对于CSV,CSV转义值......你明白了。总有一些功能或库可供您使用,不要试图在这里重新发明轮子。
如果您要清理,即删除内容,则需要更好地定义要删除的内容。删除内容也始终存在删除用户可能想要使用的合法内容的风险。所以这通常是烦人的选择。
有关此主题的更多信息,请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
答案 1 :(得分:0)
尝试一下strip_tags()。 http://php.net/manual/en/function.strip-tags.php。它对我来说对大多数英语案例都有用,可能适用于不同的语言。