我正在使用Wordpress作为CMS开发应用程序。
我有一个包含大量输入字段的表单,需要在存储到数据库之前进行清理 我希望防止SQL注入,注入javascript和PHP代码以及其他有害代码。
目前我正在使用自己的方法来清理数据,但我觉得使用WP使用的功能可能会更好。
我在Wordpress中查看了Data Validation,但我不确定我应该使用多少这些函数,以及按什么顺序。任何人都可以告诉WP功能最好用吗?
目前我通过执行以下操作“消毒”我的输入:
因为带有重音符号(é,ô,æ,ø,å)的字符以有趣的方式存储在数据库中(即使我的表格设置为ENGINE=InnoDB
,DEFAULT CHARSET=utf8
和COLLATE=utf8_danish_ci
),我现在正在使用htmlentities()转换可以有重音的输入字段。
创建SQL字符串以输入数据时,我使用mysql_real_escape_string()
。
我认为这不足以阻止攻击。因此,非常感谢建议改进。
答案 0 :(得分:16)
输入“卫生处理”是假的。
你不应该试图通过过滤(*)或转义输入来保护自己免受注入困境,你应该使用原始字符串直到你把它们放到另一个上下文中。此时,您需要为该上下文设置正确的转义函数,对于MySQL查询,mysql_real_escape_string
和HTML输出的htmlspecialchars
。
(WordPress添加了自己的转义函数,如esc_html
,这些函数原则上没有区别。)
(*:嗯,除了特定于应用程序的要求,比如检查电子邮件地址确实是一个电子邮件地址,确保密码是合理的等等。还有一个合理的理由来过滤掉控制字符在输入阶段,尽管实际上很少这样做。)
我现在正在使用htmlentities()转换可以有重音的输入字段。
我强烈建议不这样做。您的数据库应包含原始文本;如果您将其编码为HTML,则会对列进行数据库操作变得更加困难。您正在同时转义<
和"
等字符,而非非ASCII字符。当您从数据库获取数据并将其用于将其复制到页面之外的其他原因时,您现在在数据中出现了虚假的HTML转义。在您将文本写入页面的最后一刻之前,不要进行HTML转义。
如果您在将非ASCII字符输入数据库时遇到问题,那么您应首先解决的问题不同于存储HTML编码数据等不可持续的解决方法。这里有很多关于让PHP和数据库谈论正确的UTF-8的帖子,但主要的是确保你的HTML输出页面本身使用Content-Type
header / meta正确地作为UTF-8服务。然后检查您的MySQL连接是否设置为UTF-8,例如使用mysql_set_charset()
。
在创建输入数据的SQL字符串时,我使用mysql_real_escape_string()。
是的,这是正确的。只要你这样做,你就不容易受到SQL注入攻击。如果您在数据库端而不是模板输出端进行HTML转义,那么可能可能是HTML注入(导致XSS)的漏洞。因为没有通过数据库的任何字符串(例如直接从$_GET
获取)都不会被HTML转义。