如何保证$ _ SERVER [ 'PHP_SELF']?(How to secur

2019-09-16 16:45发布

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

?>

Answer 1:

为了防止XSS攻击,你应该使用htmlspecialchars()filter_input()逃脱$_SERVER['PHP_SELF'] 见这个问题的更多信息。

还需要注意的是,如果你开始的href与属性? 而没有路径,浏览器将在随后的查询字符串附加到当前请求,很像一个相对链接将追加到同一目录中。

我假设你正在消毒$prev$startrow别处。 数学比较应该让他们安全的,但如果他们是从$ _GET来这是一个好主意,通过运行它们intval()之前,你做任何事情。



Answer 2:

您应该使用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/



Answer 3:

$_SERVER['PHP_SELF']已经在某种意义上确保无人字符可以产生要张贴改变你的HTML语法。 唯一的一点是文件名本身。

通常情况下,你应该使用类似的方法htmlspecialchars消毒输出发布到浏览器前。



文章来源: How to secure $_SERVER['PHP_SELF']?