gpt4 book ai didi

javascript - 将书签添加到 wordpress 帖子

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:48 24 4
gpt4 key购买 nike

我正在尝试将 javascript 小书签链接添加到我的 WordPress 网站上的帖子。但是它不会出现在后期预览中。当我检查 WordPress 添加到帖子的链接时,它已将其转换为 javascript:void(0)。这个简单的例子重现了这个问题。

<a href="javascript:alert('Alert!');">Search Scholar</a>

还有一些其他人遇到了同样的问题here , here , here , 和 here但似乎没有人找到除了提供他们的小书签代码供人们复制和粘贴并创建他们自己的小书签之外的解决方案。

这个问题的原因是 Chrome 的 XSS 保护在通过 wp-admin 提交时从链接中剥离了 javascript。一种“解决方案”是将行 header("X-XSS-Protection: 0"); 添加到根文件夹中的 wp-blog-header.php。这是不安全的,因为它会关闭 WordPress 网站上的 XSS 保护,但它确实允许在页面加载时呈现书签代码。

这个问题是否有任何不涉及关闭 XSS 保护的真正解决方案?是否有一个插件可以安装到我的 WordPress 以允许我在我的帖子中添加 javascript: 链接?

最佳答案

EDIT 2 经过更多研究,这实际上是由 OP 提到的浏览器的 XSS 检测引起的(与任何 WordPress 特定功能相反)。只有当您在 WordPress 中单击 Preview 按钮时才会出现问题,并且只会在初始页面加载时出现。显然,WordPress 在请求 header 中发送了一些 HTML,这会触发浏览器中的 XSS 功能。如果您加载预览,然后刷新页面,XSS 问题就会消失,javascript: 链接将显示为保存时的样子。查看实际站点,发布页面后,从未遇到过此XSS问题。

编辑 经过更深入的研究(使用 @gnarf ),事实证明实际问题归结为 WordPress 在其预览中处理 javascript: 链接的方式功能。看起来 WordPress 有一些自定义 Javascript 可以运行并将所有 javascript: 链接转换为 javascript:void(0) 链接(去除任何自定义代码),但前提是您正在预览页面。发布页面后,javascript: 链接会正确呈现。


原始帖子(描述如何阻止 WordPress 在以非管理员用户身份保存帖子时删除 javascript: 链接,这是我假设的原始问题可能是)

看起来 WordPress 删除了 content_save_pre 过滤器中的 HTML。具体来说就是调用wp-includes\kses.php中的wp_kses_bad_protocol方法:

/**
* Sanitize string from bad protocols.
*
* This function removes all non-allowed protocols from the beginning of
* $string. It ignores whitespace and the case of the letters, and it does
* understand HTML entities. It does its work in a while loop, so it won't be
* fooled by a string like "javascript:javascript:alert(57)".
*
* @since 1.0.0
*
* @param string $string Content to filter bad protocols from
* @param array $allowed_protocols Allowed protocols to keep
* @return string Filtered content
*/
function wp_kses_bad_protocol($string, $allowed_protocols) {
$string = wp_kses_no_null($string);
$iterations = 0;

do {
$original_string = $string;
$string = wp_kses_bad_protocol_once($string, $allowed_protocols);
} while ( $original_string != $string && ++$iterations < 6 );

if ( $original_string != $string )
return '';

return $string;
}

$allowed_protocols 参数通过 wp_allowed_protocols() 方法检索,该方法将 kses_allowed_protocols 过滤器应用于协议(protocol)列表。

有了这些信息,您应该能够绑定(bind)到 kses_allowed_protocols 过滤器以将 javascript 添加为有效的(注意,这当然会打开安全性问题):

add_filter( 'kses_allowed_protocols', function ($protocols) {
$protocols[] = 'javascript';
return $protocols;
});

增强这种方法安全性的一种方法是为特定用户或特定 Angular 色添加检查(默认情况下,看起来这个过滤器实际上不是在管理帐户上运行,所以在允许 javascript 协议(protocol)之前,您可以使用 javascript: 链接到您的核心内容作为管理员)。

关于javascript - 将书签添加到 wordpress 帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19844641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com