drupal - 是否需要清理/转义来自 drupal 的 arg(x) 的输出?

标签 drupal xss

我正在安装 arg(x) 的 drupal 7

http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/arg/7

已在 html 输出中大量使用,在 View 模板和其他地方等。虽然我已经查看了文档并搜索了这个主题,但我仍然对是否需要清理/转义 arg 的输出感到困惑(x) 使用 php 的 htmlspecialchars 或 drupal 的 check_plain 等来防止 xss。

最佳答案

从技术上讲,根据我的测试,您 确实需要逃避它。
但好的一面是,arg()并不总是使用直接的用户输入。

如果 URL(或更准确地说, $_GET['q'] )是 node/<h3>/edit , arg(1)返回 <h3>没有检查平原。
如果您想自己测试,请添加下面的代码段并查看自己。

<?php
echo (arg(1, 'node/<h3>/edit')); ?>Normal text 

您现在将在 h3 中看到“普通文本”。

如果节点的 ID 为 4,在查看节点时,$_GET['q']将是节点/4。如果路径没有别名,URL 将是相同的。
按照上面的例子,如果用户打开 node/<h3> , arg(1)将是 <h3>无需转义,但有疑问用户会看到您使用的片段 arg()因为该页面返回 404 结果(您看不到任何块、页面内容等)。

使用 arg()t() , url() , l()和其他功能总是会逃避/清理结果,因此在实际世界中,您不太可能找到有人可以对您的网站进行 XSS 的真实案例。

这是我可以考虑的不良用途。
在 page.tpl.php 文件中,您可以从 URL 路径添加一个类,如下所示:
<body class="<?php print arg(0); ?>">

您可以预期在节点页面上,您会看到 body 标签的类是“node”,而在管理页面上,类是“admin”。但是想象一下用户打开一个这样的页面:
http://example.com/" onclick="alert('You are clicking on me');"

所以 body 标签的实际 HTML 应该是这样的:
<body class="" onclick="alert('You are clicking on me');">

现在您将看到 body 标签有一个空的 class 属性,并且 body 还添加了一个 onclick 事件。这可能是你能看到的最糟糕的例子——但我只是想向你展示一些真实的例子。
使用 $node->nid虽然是安全的。

关于drupal - 是否需要清理/转义来自 drupal 的 arg(x) 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597369/

相关文章:

php - 如何将数组传递给 Drupal 菜单回调

php - 如何在drupal中记录错误消息

javascript - OWASP ZAP Fuzzing- 输入参数作为字符串反射(reflect)在响应中,还是 XSS?

javascript - 检查输入并将其转换为适当的类型以防止 XSS

java - 如何合并 java.io.Reader 的内容或包装 Reader 的内容?

XSS 过滤器以 enctype ="multipart/form-data"形式

drupal - 如何将状态代码 410 添加到 drupal 以删除内容以改善 SEO?

drupal - 暴露过滤器 : None vs. 所有结果

php - 无法在月球页面中设置 max_post_size php 变量

javascript - Backbone.js 和 XSS/HTML 转义