Исправление PHP с помощью операторов MSQLI Real Escape String и STRTR

Следующий код представляет собой предложение метода санитарии при передаче данных в удаленную базу данных через SQL и PHP.

$name = strtr(mysqli_real_escape_string($connector_obj, $_POST['name']), '/\\', '   ');

Мой вопрос заключается в том, будет ли оператор MSQLI очищать входные данные, а затем добавляется оператор strtr, делая код все еще безопасным, или поле все еще уязвимо? Эта очистка происходит после начального запроса, поэтому другой вариант — передать очищенную базу данных, а затем выполнить операцию strtr после факта, чтобы вывести информацию на страницы, обращенные к клиенту.

На более высоком уровне, насколько внимательны пользователи к слешам в экранированных строках MSQLI? Я думаю, что это выглядело бы немного менее привлекательно и дало бы представление о структуре приложения для лиц с дурной репутацией, но любой вклад в идею был бы оценен.

-2

Решение

mysqli_real_escape_string только ускользает от персонажей. Это не дезинфицировать.

Когда значение опубликовано, это время для очистки.

Я предпочитаю использовать целочисленные значения. Вместо адреса электронной почты в качестве имени пользователя я запрашиваю номер телефона. Затем используйте регулярное выражение, чтобы удалить все, кроме числовых значений.

$number = preg_replace('/[^\d]/','',$_POST['number']);

Если я ищу целое число без пробелов, запятых, тире, я просто использую:

$number = intval($_POST['number']);

Вы должны квалифицировать значения, используемые в запросе.

$sql =  sprintf("SELECT *  FROM `Client` WHERE `Number` = %d", $id);

Я также смотрю на все, что представлено. Поиск символов и слов, которые обычно используются в атаках SQL-инъекций.

  $strike1 = 1 + preg_match_all('/\x3F/',$SAVE_ID,$matches, PREG_SET_ORDER);  // )
$strike2 = preg_match_all('/[\x21-\x2F]|[\x3A-\x40]|[\x5B-\x60]|[\x7B-\x7F]/',$SAVE_ID,$matches, PREG_SET_ORDER);
$strike3 = preg_match_all('/\x28/',$SAVE_ID,$matches, PREG_SET_ORDER);  // )
$strike4 = preg_match_all('/\x29/',$SAVE_ID,$matches, PREG_SET_ORDER);  // (
$strike5 =  preg_match_all('/COALESCE|0x|like|regex|mid|select|delete|drop|insert|do|call|replace|update|infile|lock|set|from|into|show|table|kill|reset/i',$SAVE_ID,$matches, PREG_SET_ORDER);

Когда я вижу слишком нарушения, я блокирую IP-адрес.

@mysql_unbuffered_query("INSERT INTO `Banned` (`ip`, `TimeStamp`,`Strike3`, `Attributes`) VALUES ('$ip', CURRENT_TIMESTAMP, $alert);");

Я также слежу за ошибками пароля. Если я вижу слишком много неудачных попыток за короткий промежуток времени или промежуток между попытками слишком короткий (не человеческий), я запрещаю IP.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]