Гарантирует ли filter_var, что $_SERVER["QUERY_STRING"] будет защищен от инъекции 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;
}
Это мой код, который начинает инициализацию моего скрипта, и я обеспокоен тем, что я могу быть недостаточно защищен от инъекций, если я решу продолжить текущую реализацию этого скрипта.
Я читал, что фильтрация переменных работает, чтобы предотвратить это, но я также видел примеры, где это можно игнорировать и использовать синтаксис в URL для использования скрипта при использовании QUERY_STRING.
1 ответ
Чтобы очистить строку для SQL-инъекции, вы должны экранировать ее специальные символы.
использование mysqli_real_escape_string()
или больше в основном addslashes()
,
Чтобы очистить строку от XSS, используйте htmlentities()
Хотя вам не нужно очищать пароль, просто хешируйте пароль вашей базы данных, хешируйте его таким же образом и сравнивайте. Вы не должны показывать эту клиентскую сторону, поэтому нет необходимости очищать ее от XSS.