Следующий код уязвим для SQL, и мне нужна помощь в его защите; Я не мастер с PHP или MySQL.PHP Pagination SQL Security
Я искал вокруг и видел некоторые очень полезные вещи, чтобы сделать с MySQL реального побега строки и т.д., но при реализации он просто вызывает белую страницу
if(!isset($_GET['pg'])) { $page = 1; } else { $page = $_GET['pg']; }
$select = (($page * 20) - 20);
$mysql_result = mysql_query("SELECT `id` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE ".implode(" AND ", $mysql_where)." ORDER BY id ASC LIMIT $select, 20") or die(mysql_error());
<?
$servers = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM data_servers"),0);
$pages = ceil($servers/20);
if(!isset($_GET['pg'])) { $page = 1; } else { $page = $_GET['pg']; }
if($page > 1)
{
$prev = ($page - 1);
echo "<a href='?pg=$prev'>[Inapoi]</a> ";
}
for($show = 1; $show <= $pages; $show++)
{
if(($page) == $show)
{
echo $show;
}
else
{
echo " <a href='?pg=$show'>[$show]</a> ";
}
}
if($page < $pages)
{
$next = ($page + 1);
echo " <a href='?pg=$next'>[Next]</a> ";
}
?>
Доказательство того, что код является Infact уязвимым на конце ваш URL просто добавить ? рд = MySQL
и вы должны получить ошибку синтаксиса MySQL
Обычно вы должны проверить все входы вашего кода, в частности значение $ _GET ['pg'] - просто проверьте тип и значение ввода, прежде чем передавать его в любую другую часть кода, независимо от того, является ли это SQL связанных или нет. – Stan
Так может ли быть использовано для меня использование add_slashes, mysql_escape_string, mysql_real_escape_string или мне нужно будет сделать preg_match – C0nw0nk
Простым решением является использование check cast для integer is_numeric ($ pg), если нет, то используйте значение по умолчанию (1) escape-данные и затем запрос. –