如何保护$ _SERVER ['PHP_SELF']?

时间:2012-04-22 21:29:43

标签: php security validation

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

?>

3 个答案:

答案 0 :(得分:8)

您应该使用filter_inputhttp://php.net/filter_input

$phpSelf = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL);

然后使用$phpSelf代替$_SERVER['PHP_SELF']

这比htmlspecialchars更好,但理想的解决方案是使用像http://htmlpurifier.org/

这样的工具

答案 1 :(得分:8)

要防止XSS攻击,您应该使用htmlspecialchars()filter_input()来逃避$_SERVER['PHP_SELF']。有关详细信息,请参阅this question

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

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

答案 2 :(得分:0)

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

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

相关问题