您好,我正在尝试理解何时以及为什么我应该使用这些esc替代方案,到目前为止,我认为我理解需要确保输入不包含错误字符,并且不会导致错误/安全威胁。
我仍然想知道的是,我应该始终在HTML字段中使用esc\\u attr,还是在联系人表单的输入字段中使用esc\\u attr?对于我自己的所有url,例如image src path,我是否应该始终使用esc\\u url?
那么\\u title()呢?我应该在代码中使用这些转义中的一个转义到所有回音,还是只在可能有用户输入的地方使用?
您好,我正在尝试理解何时以及为什么我应该使用这些esc替代方案,到目前为止,我认为我理解需要确保输入不包含错误字符,并且不会导致错误/安全威胁。
我仍然想知道的是,我应该始终在HTML字段中使用esc\\u attr,还是在联系人表单的输入字段中使用esc\\u attr?对于我自己的所有url,例如image src path,我是否应该始终使用esc\\u url?
那么\\u title()呢?我应该在代码中使用这些转义中的一个转义到所有回音,还是只在可能有用户输入的地方使用?
对你应该一直逃跑
迟逃,常逃
转义与意图有关,如果要输出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
应该很好用,其他的也一样
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核心过滤器执行此操作,但尽可能避免在您自己的过滤器和代码中需要此操作如果需要转义的值是完全从代码生成的,就像通常在管理屏幕中一样,那么是的,总是转义。
当您需要输出核心API的结果时,事情会变得更加复杂,因为它们不一致,最好深入代码,看看API返回的值是否已经转义,the_title
可能是转义的,但如果使用API获取标记名,则需要转义它。
更困难的情况是,当您的输出只是某个更高层核心的输入时,比如您在过滤器或小部件中返回的值。小部件是令人讨厌的,因为在前端,除了小部件标题之外,您应该避开表单中的所有值。
根据经验,如果核心或核心主题中有类似的功能,请看看它们是如何处理转义的,并执行相同的操作。
我在用SyntaxHighlighter Evolved 突出显示代码示例。E、 g。[csharp] string s = \"text\"; List<int> numbers = new List<int>(); [/csharp] 当我第一次保存它时,没关系,但编辑wordpress时,文本会更改为[csharp] string s = "text"; List<int&am