|
|
|
| Здравствуйте. Решил вот написать функцию раз и навсегда избавляющую от sql инъекций. Оцените скрипт, может, кто подскажет, что еще нужно добавить, а что излишне.
/****************************************************************************************************
*****************************************************************************************************
** **
** Скрипт проверки переменной на SQL injection и XSS **
** Версия: 1.0 **
** **
** Автор: Kirill_petrovi4 **
** E-mail: info@admiralart.ru **
** ICQ:400056336 **
** Дата: 17.07.2009 **
** **
*****************************************************************************************************
****************************************************************************************************/
function del_sql_inj($sql_request, $type_request)
{
mysql_real_escape_string($sql_request);
stripslashes($sql_request);
htmlspecialchars($sql_request);
if($type_request == 'text')//Проверяем текстовые параметры
{
$text = strtolower($sql_request); // Приравниваем текст параметра к нижнему регистру
if (
substr_count($text, "select") ||
substr_count($text, "union") ||
substr_count($text, "order") || // Ищем вхождение слов в параметре
substr_count($text, "where") ||
substr_count($text, "char") ||
substr_count($text, "insert") ||
substr_count($text, "like") ||
substr_count($text, "or") ||
substr_count($text, "adn") ||
substr_count($text, "update") ||
substr_count($text, "include") ||
substr_count($text, ";") ||
substr_count($text, "from")
){
if (is_writeable('error_site.log'))//Заносим запись в log файл при обнаружени иньекции
{
$err_data = date("m.d.y H:i:s")." ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: обнаружена sql иньекция. Текст запроса: $sql_request \r\n";
$fh = fopen('error_site.log', "a+");
fwrite($fh, $err_data);
fclose($fh);
}
else echo "ошибка записи";
exit('Обнаружена SQL иньекция!');
}
}
if($type_request == 'int')
{
$sql_request = intval($sql_request);
}
if($type_request == 'float')
{
floatval($sql_request);
}
return $sql_request;
}
|
| |
|
|
|
|
|
|
|
для: xxxLEOxxx
(18.07.2009 в 13:29)
| | >Здравствуйте. Решил вот написать функцию раз и навсегда избавляющую от sql инъекций.
Порочен сам подход.
Оценивать скрипт не имеет смысла.
Попробуйте подумать и ответить на вопрос, смогли бы Вы на этом форуме опубликовать этот скрипт, если бы на нем стояла в качестве защиты Ваша функция? | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2009 в 14:36)
| | Ну согласитесь на большинстве сайтов, никогда не будет передаваться код и запросы к БД в качестве сообщения. Здесь свою ошибку понял,скрипт уже не универсален.
Какой подход предложите вы? | |
|
|
|
|
|
|
|
для: xxxleoxxx
(18.07.2009 в 15:37)
| | С чем соглашаться-то?
С тем что Вы слово select считаете матерным или слово or?
А почему собственно нельзя написать тескт запроса, он что сам по себе кусучий?
И что это за манера судить о том, что хорошо большинству, а что нет?
Мой подход прост. Первородных SQL инъекций не быват. Бывают ошибки обработки данных, к ним приводящие.
Не надо воевать с инъекцией. Надо не делать ошибок - инъекции сами пропадут.
Более подробно можете посмотреть в задаче 21 из соответствующего раздела. | |
|
|
|