SQL инъекция

HoustoN

Местный
Здравствуйте.Хочу узнать ваши советы.Правильный ли код от SQL инъекции?.
 

HoustoN

Местный
Код:
<?PHP
error_reporting(0); // вывод ошибок


if($_GET['menu']!='admin' && 'support'){
function limpiarez($mensaje){
$mensaje = htmlspecialchars(trim($mensaje));
$mensaje = str_replace("'","?",$mensaje);
$mensaje = str_replace(";","¦",$mensaje);
$mensaje = str_replace("$"," USD ",$mensaje);
$mensaje = str_replace("<","?",$mensaje);
$mensaje = str_replace(">","?",$mensaje);
$mensaje = str_replace('"',"”",$mensaje);
$mensaje = str_replace("%27"," ",$mensaje);
$mensaje = str_replace("0x29"," ",$mensaje);
$mensaje = str_replace("& amp ","&",$mensaje);
return $mensaje;
}

foreach($HTTP_POST_VARS as $i => $value){$HTTP_POST_VARS[$i]=limpiarez($HTTP_POST_VARS[$i]);}
foreach($HTTP_GET_VARS as $i => $value){$HTTP_GET_VARS[$i]=limpiarez($HTTP_GET_VARS[$i]);}
foreach($_POST as $i => $value){$_POST[$i]=limpiarez($_POST[$i]);}
foreach($_GET as $i => $value){$_GET[$i]=limpiarez($_GET[$i]);}
foreach($_COOKIE as $i => $value){$_COOKIE[$i]=limpiarez($_COOKIE[$i]);}


foreach($HTTP_POST_VARS as $i => $value){$HTTP_POST_VARS[$i]=stripslashes($HTTP_POST_VARS[$i]);}
foreach($HTTP_GET_VARS as $i => $value){$HTTP_GET_VARS[$i]=stripslashes($HTTP_GET_VARS[$i]);}
foreach($_POST as $i => $value){$_POST[$i]=stripslashes($_POST[$i]);}
foreach($_GET as $i => $value){$_GET[$i]=stripslashes($_GET[$i]);}
foreach($_COOKIE as $i => $value){$_COOKIE[$i]=stripslashes($_COOKIE[$i]);}

################## Фильтрация всех POST и GET #######################################
function filter_sf(&$sf_array)
{
while (list ($X,$D) = each ($sf_array)):
$sf_array[$X] = limpiarez(mysql_escape_string(strip_tags(htmlspecialchars($D))));
endwhile;
}
filter_sf($_GET);
filter_sf($_POST);
#####################################################################################

function anti_sql()
{
$check = html_entity_decode( urldecode( $_SERVER['REQUEST_URI'] ) );
$check = str_replace( "", "/", $check );

$check = mysql_real_escape_string($str);
$check = trim($str);
$check = array("AND","UNION","SELECT","WHERE","INSERT","UPDATE","DELETE","OUTFILE","FROM","OR","SHUTDOWN","CHANGE","MODIFY","RENAME","RELOAD","ALTER","GRANT","DROP","CONCAT","cmd","exec");
$check = str_replace($check,"",$str);


if( $check )
{
if((strpos($check, '<')!==false) || (strpos($check, '>')!==false) || (strpos($check, '"')!==false) || (strpos($check,"'")!==false) || (strpos($check, '*')!==false) || (strpos($check, '(')!==false) || (strpos($check, ')')!==false) || (strpos($check, ' ')!==false) || (strpos($check, ' ')!==false) || (strpos($check, ' ')!==false) )
{
$prover = true;
}

if((strpos($check, 'src')!==false) || (strpos($check, 'img')!==false) || (strpos($check, 'OR')!==false) || (strpos($check, 'Image')!==false) || (strpos($check, 'script')!==false) || (strpos($check, 'jаvascript')!==false) || (strpos($check, 'language')!==false) || (strpos($check, 'document')!==false) || (strpos($check, 'cookie')!==false) || (strpos($check, 'gif')!==false) || (strpos($check, 'png')!==false) || (strpos($check, 'jpg')!==false) || (strpos($check, 'js')!==false) )
{
$prover = true;
}

}

if (isset($prover))
{
die( "Попытка атаки на сайт или введены запрещённые символы!" );
return false;
exit;
}
}
anti_sql();

}
 

APTEMOH

Участник
Возможно правильный, но по моему опыту, не рабочий
Даже если рабочий, то большая нагрузка от него. Малого того что в ферме база не оптимизирована, запросы, так еще и это )
От SQL инъекций нужно немного иначе бороться.
 

APTEMOH

Участник
Не только фильтровать, но и проводить валидацию...
Фильтры валидации данных PHP
Очищающие фильтры PHP
Да, но эти ска фильтры не все фильтруют. Например кавычки пропускают. Приходится их или "вырезать" или "регуляркой" ловить.
Но в целом хотя бы их использовать. Не только POST с форм, но и GET еще нужно.
 

pligin

Команда форума
Администратор
Да, но эти ска фильтры не все фильтруют. Например кавычки пропускают. Приходится их или "вырезать" или "регуляркой" ловить.
Но в целом хотя бы их использовать. Не только POST с форм, но и GET еще нужно.
Где кавычки?
Если email, то тут и говорить нечего - везде есть инструменты проверки email...
Если это текст, который потом нужно вывести на странице, то подойдет FILTER_SANITIZE_FULL_SPECIAL_CHARS, что эквивалентно htmlspecialchars() с установленным параметром ENT_QUOTES - кодирует все спецсимволы... чтобы вывести данный текст в первоначальном состоянии нужно использовать htmlspecialchars_decode
Если нужно фильтровать числа, то использовать FILTER_SANITIZE_NUMBER_INT и FILTER_SANITIZE_NUMBER_FLOAT , но лучше сразу провести валидацию и выдать ошибку - FILTER_VALIDATE_FLOAT и FILTER_VALIDATE_INT ... ну и не забыть, что в этом случае знаки + и - проходят...
Но если говорить про логины и остальные дополнительные данные, которые просят ввести пользователя, то тут ни один фильтр не поможет - они универсальные... и чтобы получить нужный результат, то, конечно же, нужно использовать регулярки, чтобы пользователи вводили данные именно в таком формате, в котором было задумано....
 

Zhulif

Участник
Привет всем есть вопрос по фильтрации в частности с этой функцией
PHP:
$mensaje = htmlspecialchars(trim($mensaje));
если ее ставить в код индекса все работает кроме добавления новости русские символы не пропускает. А убираю все в норме. Опасно убирать эту функцию с кода?
Может есть решение этой проблемы?
Извиняюсь если вопрос не по теме.
 

pligin

Команда форума
Администратор
Привет всем есть вопрос по фильтрации в частности с этой функцией
PHP:
$mensaje = htmlspecialchars(trim($mensaje));
если ее ставить в код индекса все работает кроме добавления новости русские символы не пропускает. А убираю все в норме. Опасно убирать эту функцию с кода?
Может есть решение этой проблемы?
Извиняюсь если вопрос не по теме.
почитай эту тему - тут много интересного написано...
стандартный текстовый редактор с большим количеством файлов лучше заменить на простой редактор nicEdit, который состоит из одного файла
 
Верх