我使用下面的代码来控制分页。它正在使用$_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>';
}
?>
答案 0 :(得分:8)
您应该使用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/
答案 1 :(得分:8)
要防止XSS攻击,您应该使用htmlspecialchars()
或filter_input()
来逃避$_SERVER['PHP_SELF']
。有关详细信息,请参阅this question。
另请注意,如果您使用href
启动?
属性且没有路径,则浏览器会将后续查询字符串附加到当前请求,就像相对链接会附加到同一目录一样
我假设您正在其他地方清理$prev
和$startrow
。数学比较应该使它们安全,但是如果它们来自$ _GET,那么在你做任何其他事情之前通过intval()
运行它们是个好主意。
答案 2 :(得分:0)
$_SERVER['PHP_SELF']
在某种意义上已经是安全的,没有任何字符可以对您要发布的HTML语法进行更改。唯一的问题是文件名本身。
通常,您应该使用htmlspecialchars
之类的方法在将输出发布到浏览器之前清理输出。