Sql injection - Внедрения sql кода в запрос.
Данная уязвимость позволяет выполнить почти любой sql запрос и получить информацию о базах, таблицах и данных.
Что в итоге приведёт получения таблицы с пользователям и расшифровке ихних паролей.
Для защиты от sql мы должны фильтровать входные данные $_POST запроса, $_GET запроса, сессий($_SESSION) и кук($_COOKIE).
Примечания: в обычном виде опасность не несёт, но если используется в sql запросах то нужно получаемые данные отфильтровать.
Для защиты от sql инъекций используйте функцию mysql_real_escape_string
Пример:
mysql_query("SELECT * FROM table WHERE url='".mysql_real_escape_string($_GET['url'])."'");
Функция str_replace:
str_replace("'","\'", $_GET['url']);
Можно написать одну функцию:
function safe($var){
if(is_array($var)){
foreach($var as $k => $v){
if(is_array($k))
$res[safe($k)] = str_replace("'","\'",htmlspecialchars($v));
elseif(is_array($v))
$res[str_replace("'","\'",htmlspecialchars($k))] = safe($v);
elseif(is_array($k) and is_array($v))
$res[safe($v)] = safe($k);
else
$res[str_replace("'","\'",htmlspecialchars($k))] = str_replace("'","\'",htmlspecialchars($v));
}
}
else $res = str_replace("'","\'",htmlspecialchars($var));
return $res;
}
Данная функция защит вас также от xss уязвимости, но чтобы она вас защитила вам нужно прописать с верху файла index.php саму функцию и этот код.
$_POST = safe($_POST);
$_GET = safe($_GET);
$_SESSION = safe($_SESSION);
Если вы пропишите данный код, то вам не нужно больше писать не где функцию для защиты от sql.