我正在安装 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/