我发现在管理员中创建新页面时,如果我输入
<script>alert(1)</script>
在标题字段中并发布/预览页面,然后执行脚本。它清楚地表明数据没有被正确转义,因此容易受到 xss 攻击。
任何人都可以帮助我如何在保存在管理部分之前清理数据,或者是否有任何插件,因为我对wordpress相当陌生。我知道很多插件在前端评论等方面工作正常,但找不到用于管理部分的插件。
设置
define( 'DISALLOW_UNFILTERED_HTML', true );
in wp-config.php
是防止所有用户能够在帖子和页面的标题和正文中插入脚本的推荐方法。
这将在保存到数据库之前从字段中删除过滤掉任何<script>
标记。
为什么允许某些用户发布未经过滤的 HTML?
具有管理员或编辑者角色的用户可以在帖子标题、帖子内容和评论中发布未经过滤的 HTML。毕竟,WordPress是一种发布工具,人们需要能够包含他们需要交流的任何标记。权限较低的用户不得发布未经过滤的内容。
如果要对WordPress运行安全测试,请使用权限较低的用户,以便过滤所有内容。如果您担心管理员将 XSS 放入内容中并窃取 Cookie,请注意,所有 Cookie 都标记为仅 HTTP 传递,并分为用于管理页面的特权 Cookie 和用于面向公众的页面的非特权 Cookie。内容永远不会在未经过滤的情况下显示在管理员中。无论如何,管理员拥有广泛的超能力,其中未过滤的HTML是次要的。
在WordPress Multisite中,只有超级管理员可以发布未经过滤的HTML,因为所有其他用户都被视为不受信任。
要为所有用户(包括管理员)禁用未过滤的 HTML,可以将
define( 'DISALLOW_UNFILTERED_HTML', true );
添加到wp-config.php
。
https://make.wordpress.org/core/handbook/testing/reporting-security-vulnerabilities/#why-are-some-users-allowed-to-post-unfiltered-html
中有很多清理功能,例如:
sanitize_title( $title, $fallback_title, $context );
由于我真的不知道您要清理什么数据或数据类型,因此我无法真正为您选择合适的功能。
在这里阅读更多 :
http://codex.wordpress.org/Function_Reference/sanitize_title
这里列出了其他功能:
http://codex.wordpress.org/Function_Reference/sanitize_title#Related