filter_var是否保证$ _SERVER [" QUERY_STRING"]将受到XSS注入保护?

时间:2014-05-19 19:21:00

标签: php xss

############################################
## Connection Creation for Both Databases ##
############################################

//Create Connection for Pokemon Test Database
$PokemonConnection=mysqli_connect("URL","username","password","database");

//Check Pokemon Test Database Connection for Errors
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

//Create Connection for Xenforo Forum Database
$XenConnection=mysqli_connect("URL","username","password","database");

//Check Xenforo Forum Database Connection for Errors
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

############################################
###Password Protection for Initialization###
############################################

//Sanitize Password Passed From xenForo and Redirect If Invalid ID

$Password = filter_var($_SERVER["QUERY_STRING"], FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_EMAIL);

if($Password != 'Password')
{
    header("Location: http://www.url.com/error.html");
    echo 'Invalid String Length';
    exit;
}

这是我开始初始化脚本的代码,我担心如果我选择继续使用此脚本的当前实现,我可能无法充分保护注入。

我已经读过变量过滤可以防止这种情况,但我也看到了可以忽略的示例,如果使用QUERY_STRING,可以在URL中使用语法来利用脚本。

1 个答案:

答案 0 :(得分:1)

为了清理sql注入的字符串,你必须转义它的特殊字符。

基本mysqli_real_escape_string()使用addslashes()或更多。

要针对XSS清理字符串,请使用htmlentities()

虽然您不必清理密码,但只需对数据库密码进行哈希处理,以相同的方式对此进行哈希处理,然后对它们进行比较。 您不应该显示此客户端,因此无需针对XSS进行清理。