前言:我的回答并不是对你的具体问题的回答,但要知道这与我认识的大多数人使用错误字符串的方式有关,这是一件至关重要的事情:向最终用户显示翻译后的错误消息。
对于汤姆已经说过的话,我不能再多补充了,你原来的问题的答案是否定的,因为我会在这个答案的最后重复我自己,aWP_Error
消息是一个纯字符串,只应包含简单字符,可以在任何系统中使用。在他们身上放上标记之类的东西会破坏他们的目的,但有一件事你可能不知道。
翻译(&A);显示该翻译。
让我们面对现实吧——错误消息应该显示出来,并且很可能会被翻译出来,这取决于您的产品,但大多数插件和;为了做到这一点,我可以想出20多个错误显示至关重要的用例。问题从哪里开始?
罪魁祸首是Polylang,但这不是它的错,每个翻译插件都会这样做,它们永远不会逃脱翻译后的字符串。当然,这是插件的工作,但在插件给你之后,你如何处理字符串,这是你的工作。
那么,它是如何工作的呢?
将字符串与Polylang集成,但不是普通字符串,而是将其放入:
<body onload=alert(\'XSS\')>
现在,当您回显这个翻译后的字符串时,无论在哪里,都会出现一个弹出窗口:
如果你愿意
just escape it, 这永远不会是一个问题。这里的问题是,如果您将翻译权限授予用户,或者插件本身在其他地方存在漏洞,允许用户启动“修改翻译字符串”,那么您的网站就会遭到黑客攻击。事实上,如果你有翻译文件,有人插入了任何JS,而你没有正确输出,你接受了翻译并将其发送到存储库,那么任何使用该翻译包的人都会在他们的网站上有恶意JS,这可能永远不会发生,只会告诉你。
回到正轨,每当您输出一个已翻译的字符串时,它都会为您提供任何翻译该字符串的人所做的事情:
echo fav_plugin_output_translated_string( \'string-1\' ) // will output whatever matches
这可能是恶意的,因此,如果插件没有内置的转义函数,根据需要该字符串的位置,可以这样做,但在HTML中显示的情况有99%:
echo esc_html( fav_plugin_output_translated_string( \'string-1\' ) );
这样,无论恶意用户输入了什么,您都将始终是安全的,或者与
esc_html
应该是的。
Remember, when you output any translated strings, never trust them, escape and perhaps leave a way for anyone interacting with your system to turn off that escaping in case they wanna do something with it.
你的主题/插件就是你的系统,即使它是非常可扩展的,但如果不创建另一个插件,它就永远无法扩展。这不是你的工作,你做了自己的工作,并确保无论何时输出字符串或存储字符串以供以后显示,都正确地转义了它们。
你无法控制其他人的验证器/消毒剂/清洁剂”,但你可以控制如何显示转义。