是否有办法在全球范围内应用esc_html(...)到所有输入和锚点以过滤出XSS标记?

时间:2021-11-05 作者:user3038672

我在WP开发2年后才开始接触XSS预防,所以我希望有一个简单的解决方案。安装旨在防止XSS滥用的插件不是一个选项。我需要以编程方式全局转义输入值并锚定HREF,以防止微型站点上的恶意XS。我想知道我是否可以在函数中这样做。带有此函数的php文件,除了我认为;\\u内容“;过滤器太宽:

add_filter("the_content", "prevent_xss");

function prevent_xss($the_Post)
{
 $the_New_Post = str_replace(array(‘&’,’<’,’>’),array(‘&’,’<’,’>’), $the_Post);
 return $the_New_Post;
}
任何帮助都将不胜感激。提前谢谢你。

1 个回复
SO网友:Tom J Nowell

有没有一种方法可以全局应用esc\\U html(…)到所有输入和锚点以筛选出XSS标记?

不,当你输出的时候已经太迟了,任何损坏都已经造成了。

即使你能做到这一点,你也不会想这么做,逃跑是高度关联的。逃避是关于实施假设,例如。<a href="<?php echo esc_url( $url ); ?>... 部队$url 即使不是URL,也要成为URL。不再应该是URL,它将始终是URL。它可能是一个损坏的URL,但它肯定是一个URL。esc_html 不是一个适用于所有场合的通配符转义函数。

当您拥有HTML时,应用转义为时已晚,并且您没有上下文来确定可以使用哪个转义函数。

您可以使用DOM解析器检查HTML,但这无助于防止HTML标记注入或XSS攻击。它也无法应用转义,因为值已经存在,最多只能是清理和验证,而不是转义。wp_kses_post 可用于将有效标记列入白名单,但WordPress已经这样做了,并且正在the_content 过滤器会破坏使用合法标签等的嵌入内容和其他内容

同样,尝试这样做的插件也不可信,这是不可能做到的。PHP中没有可以应用的通用自动转义。事实上,为了安全可靠,必须对输出进行转义。

相关推荐

Apply filters on date format

我使用Wordpress主题,其中格式日期和时间直接编码为两种格式:<?php the_time(\'d M\'); ?> <?php the_time(\'H:i\'); ?> 我想要的:显示wordpress选项中定义的日期和时间我不想在子主题中创建修改过的模板,我更喜欢使用函数。我已经在函数中添加了php。php此代码有效:add_filter( \'the_time\', \'changer_date_format\', 10, 1 ); //o