在许多“如何创建自定义元框”教程中,当保存数据时,即update\\u post\\u meta,数据会转义:
update_post_meta( $post_id, \'city\', esc_attr( ucwords( $_POST[\'city\'] ) ) );
有些教程在保存时不esc,并在屏幕输出时执行。
但是,转义保护屏幕的输出,即回声:
echo esc_attr( $city );
那么,如果在输出到屏幕之前或在保存之前按esc键,这有关系吗?
如果您在保存时按esc键,则esc键的顺序、消毒和验证是否重要?
您是否esc然后清理并验证或清理,esc并清理。等
最合适的回答,由SO网友:Mark Kaplun 整理而成
是的,的确如此。转义取决于上下文,在最坏的情况下,如使用esc_html
直接写入DB时,只是一个安全漏洞。
即使没有安全问题,也有理论问题。用户要求您存储A,而您正在存储B。在简单的情况下,B正是A在HTML中的显示方式,但生活很少是简单的,而在某一点上,您希望在您想要的输入中显示Aesc_attr
在你想使用的文本区域的另一个esc_html
. 如果您已经在DB中将A转换为B,则需要为B重建原始A的PITA,以便对其应用正确的转义函数。
经验法则:在DB中,您应该存储用户提交的原始值(可能已清理,但未转义),转义只应在输出时执行。