2015-01-22 1 views
-2

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

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

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

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

ответ

0

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

Когда добавляется стоимость, это время для дезинфекции.

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

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

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

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

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

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

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

$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

Nice. Можете ли вы подробнее рассказать о функциях, которые вы использовали в вашей системе удара? –

Смежные вопросы