在插入到数据库之前对数据进行转义/编码? 时间:2018-03-05 作者:JSP 是一种正确的策略,在将数据放入数据库之前从不转义数据。我觉得我以前看到过这个引用,但现在找不到了,这并没有让我清楚:https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data 出现此问题是因为我正在尝试搜索字段和a&;R变为A&所以我有两个选择:我可以用HTML编码(esc_html) 搜索输入将字段插入数据库时,我无法对其进行HTML编码(仅在输出时转义/编码)我看到wp\\U帖子。post\\u标题和wp\\u术语未转义。因此,即使WordPress本身在这方面也存在内部不一致。正确的方法是什么? 2 个回复 SO网友:Tom J Nowell 您在输出时逃逸,我怀疑在逃逸清理和验证之间存在混淆Sanitise 数据到达时。这会去除不应该存在的内容,例如小写字符串中的大写字母、电话号码中的单词和字母、尾随空格等。清理清理数据常见的清理功能包括trim, sanitize_key, wp_strip_tags, intval, wp_kses_post, etcValidate 数据一旦被清理干净。那个电话号码真的是电话号码吗?有人说是吗-20 岁为什么那个男人的地址描述了奶酪糊的配方如果未验证,则拒绝数据。如果有,则处理并存储该值常见验证包括正则表达式,is_numeric, 检查字符串长度,is_email, 等等,验证通常需要特定于上下文的检查,例如强制值位于某个范围内,或者它们出现在白名单数组中Escape 将保存的数据输出到前端时。在输出时,只执行一次。不要在函数中返回复杂的HTML片段,要回显它们,并在回显时转义。如果不安全的东西通过,转义可能会破坏输出,但它保证URL始终是URL,即使它是一个损坏的URL,文本始终是文本,即使它包含危险的标记,等等转义函数包括但不限于esc_html, esc_attr, esc_url, wp_kses_post, etc请注意,当数据从外部来源(如浏览器)传入时,会进行清理和验证。将数据发送到API/用户/浏览器时会发生转义。逃避就像一把饼干刀,它能强化人们的期望。如果变量包含HTML属性,esc_attr 将确保它是一个属性,并且不包含任何对属性无效的内容,即使这意味着要修改值以使其适合,删除位。当然,如果已正确转义,则永远不会损坏有效值。请注意,如果多次转义某个值,则在某些情况下,可能会允许精心编制的数据爆发并呈现恶意输出。这就是为什么您只能在输出时逃逸,而且总是尽可能晚。预先逃逸的数据带来了一个头疼的问题,那就是必须跟踪哪些已经逃逸,哪些还没有逃逸,难道没有人有时间这么做吗。对于逃避,信任是不必要的,当你可以强迫它安全时,你永远不应该相信它是安全的。 SO网友:Mark Kaplun 添加到@tom关于核心代码的回答中。核心代码在软件方面是古老的,由不同专业水平的人完成,但更重要的是,一旦功能“在野外”,就很难在不破坏插件和主题的情况下修复它,因为插件和主题可能依赖于特定的工作方式。以防万一,小部件标题正在被积极清理,没有被转义。这是一个“史前”代码,也是一些插件实际上依赖的行为。所以当您编写自己的代码时,遵循@Tom所说的,当您需要使用核心API,并且您不确定它在逃逸/卫生方面的作用时,只需查看代码本身。 结束 文章导航