对你应该一直逃跑
迟逃,常逃
转义与意图有关,如果要输出URL,请使用esc_url
, 而且它肯定是一个URL(如果数据是恶意的,它将变得安全)
我仍然想知道的是,我应该始终在HTML字段中使用esc\\u attr,还是在联系人表单的输入字段中使用esc\\u attr?对于我自己的所有url,例如image src path,我是否应该始终使用esc\\u url?
如果是硬编码URL?例如。"http://example.com"
? No, 我们知道这很安全
如果是来自函数或其他来源的URL?例如。echo get_permalink()
或echo $url
? Yes, you should escape 没有办法知道它是否安全
如果它是一个内部输出且不需要echo
陈述例如。the_permalink()
? No 无法避免这种情况,函数需要在内部进行转义。输出缓冲区可以在紧急情况下使用,但这条路会导致疯狂
那么\\u title()呢?我应该在代码中使用这些转义中的一个转义到所有回音,还是只在可能有用户输入的地方使用?
无法逃避内部输出的函数。the_title
应该很好用,其他的也一样
有1个例外
bloginfo
出于安全原因,请不惜一切代价避免使用此功能。
bloginfo
并不总是在内部转义,而且由于它在内部输出,因此无法添加转义。
解决方案使用get_bloginfo
并逃避结果,例如。
<a href="<?php echo esc_url( get_bloginfo( \'site\' ) ); ?>">
get_bloginfo
返回而不是输出值,允许我们使用转义函数。
关于过滤器的简要说明有时您希望通过过滤器传递内容,例如the_content
, 但转义结果将去掉标记。
例如,这将删除当前的任何嵌入式视频:
echo wp_kses_post( apply_filters( \'the_content\', $stuff ) );
解决方案是:
echo apply_filters( \'the_content\', wp_kses_post( $stuff ) );
我们知道输入是安全的,因此输出必须是安全的。这假设在该过滤器上运行的任何代码也会相应地转义。对于这些情况,请使用WP核心过滤器执行此操作,但尽可能避免在您自己的过滤器和代码中需要此操作