Является ли это безопасным способом фильтрации данных и предотвращения SQL-инъекций и других атак?

Я создал две простые функции для фильтрации вставленных данных до того, как они были введены в запрос mysql.

Для formfields (я также использую регулярные выражения для проверки каждого поля отдельно.

// Form filter function filter($var) { // HTML is not allowed $var = strip_tags(trim($var)); // Check magic quotes and stripslashes if(get_magic_quotes_gpc()) { $var = stripslashes($var); } // Not using it right now, is it recommended? // $var = htmlentities($var, ENT_QUOTES); // Escape $var = mysql_real_escape_string($var); // Return return $var; } 

Затем для id (отправлено в URL) я использую этот фильтр:

 // ID filter function idfilter($idfilter) { // Delete everything except numbers $idfilter = ereg_replace("[^0-9]", "", $idfilter); // Round numbers $idfilter = round($idfilter); // Test if the input is indeed a number if(!is_numeric($idfilter) || $idfilter % 1 != 0) { $idfilter = 0; } // Filter using the formfilter (above) return filter($idfilter); } 

Есть ли предложения добавить или снять эти простые функции? И это «безопасно»?

Solutions Collecting From Web of "Является ли это безопасным способом фильтрации данных и предотвращения SQL-инъекций и других атак?"

Вы используете устаревшую функцию как magic_quotes и ereg_* . Чтобы предотвратить инъекцию Sql, вы должны использовать подготовленный оператор (я предлагаю использовать PDO ), и для предотвращения XSS вы должны использовать strip_tags (), как вы это делаете.

Используйте параметры в своих запросах вместо конкатенации строки.

Фильтры и очистители обычно недостаточно безопасны.

Если вы используете целые идентификаторы idFilter() можно безопасно удалить до

 function idfilter($idfilter) { return (int)$idfilter; } 

Как предложили другие, использование параметризованных запросов – это правильный путь.