我想确保插件/主题中的所有数据在进入数据库和输出到浏览器之前都得到了安全处理。我的问题是,有些情况下,API会为您处理清理,比如在保存post meta字段时,还有一些情况下,插件/主题作者会全权负责,比如在保存自定义设置时。
对于这个问题的范围,我不关心在域级别验证数据,例如,检查表单上的年龄字段是否在0到120之间,或者电子邮件地址是否有效。我只关心安全性——例如,在保存到数据库时,转义SQL查询以避免SQL注入,或者清理输出到HTML模板的数据以避免XSS。
对于输出清理,我知道您始终需要使用以下函数esc_html()
和esc_attr()
将变量回送到HTML模板时。但是,当使用template tags? 他们是否都已经清理了输出?如果是,针对哪个上下文(通用HTML、标记属性等)?有些函数具有不同上下文的变体(如the_title_attribute()
, 但大多数人没有。
对于输入消毒,我知道我需要使用$wpdb->prepare()
当进行手动查询时,但是当使用设置API创建插件设置页面,或者为自定义帖子类型保存帖子元字段时,情况会怎样?
现在,每次我使用一个函数来找出它是否会净化,我只是在深入研究核心并阅读教程,但这很容易出错,也很耗时。我希望找到一个全面的列表,列出所有可能的情况,以及API是否能处理这些情况。e、 g。,
API验证/清理保存post meta的update_postmeta()
使用保存用户元update_user_meta()
输出帖子标题-使用上下文适当的变体the_title()
等您必须使用设置API手动验证/清理保存插件选项。将回调作为的第三个参数传递register_setting()
.直接数据库查询:将查询包装到$wpdb->prepare()
.在HTML中输出变量。使用esc_attr()
, esc_html()
, 我还想了解为什么API在某些情况下提供它,而在其他情况下不提供它。我假设这与数据的未知性质有关,但我希望听到一个彻底的解释。