5

我正在使用下面的代码来控制分页。它正在使用$_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>';
    }

?>
4

3 回答 3

10

你应该使用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/之类的工具

于 2012-04-22T21:38:25.553 回答
9

为防止 XSS 攻击,您应该使用htmlspecialchars()filter_input()转义$_SERVER['PHP_SELF']。有关更多信息,请参阅此问题

另请注意,如果您href以没有路径的属性开始?,浏览器会将后续查询字符串附加到当前请求,就像相对链接将附加到同一目录一样。

我假设您正在消毒$prev$startrow其他地方。数学比较应该使它们安全,但如果它们来自 $_GET,那么intval()在你做任何其他事情之前运行它们是个好主意。

于 2012-04-22T21:41:46.820 回答
0

$_SERVER['PHP_SELF']在某种意义上已经是安全的,没有字符可以对您要发布的 HTML 语法产生更改。唯一的就是文件名本身。

htmlspecialchars通常,您应该在将输出发布到浏览器之前使用诸如清理输出之类的方法。

于 2012-04-22T21:34:33.360 回答