我使用下面这段代码来控制分页。 它使用$_SERVER['PHP_SELF']
所以我想知道,如果它的安全的这样或那样我有什么做的,使$_SERVER['PHP_SELF']
安全吗?
<?php
if($rows > 10) {
echo '<a id=nex href="'.$_SERVER['PHP_SELF'].'?pg='.($startrow+10).'">
Next</a>';
}
$prev = $startrow - 10;
if ($prev >= 0) {
echo '<a id=pex href="'.$_SERVER['PHP_SELF'].'?pg='.$prev.'">
Previous</a>';
}
?>
为了防止XSS攻击,你应该使用htmlspecialchars()
或filter_input()
逃脱$_SERVER['PHP_SELF']
见这个问题的更多信息。
还需要注意的是,如果你开始的href
与属性?
而没有路径,浏览器将在随后的查询字符串附加到当前请求,很像一个相对链接将追加到同一目录中。
我假设你正在消毒$prev
和$startrow
别处。 数学比较应该让他们安全的,但如果他们是从$ _GET来这是一个好主意,通过运行它们intval()
之前,你做任何事情。
您应该使用filter_input
: http://php.net/filter_input
$phpSelf = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL);
然后使用$phpSelf
代替$_SERVER['PHP_SELF']
这是优于htmlspecialchars
,但理想的解决方案将使用类似的工具http://htmlpurifier.org/
$_SERVER['PHP_SELF']
已经在某种意义上确保无人字符可以产生要张贴改变你的HTML语法。 唯一的一点是文件名本身。
通常情况下,你应该使用类似的方法htmlspecialchars
消毒输出发布到浏览器前。