Я использую это:
function safeClean($n) { $n = trim($n); if(get_magic_quotes_gpc()) { $n = stripslashes($n); } $n = mysql_escape_string($n); $n = htmlentities($n); return $n; }
Чтобы предотвратить любые инъекции MySQL или что-то в этом роде. Всякий раз, когда я использую его для обтекания $ _POST,
$username = safeClean($_POST['user']); $password = md5(safeClean($_POST['password'])); $vpassword = md5(safeClean($_POST['verify'])); $email = safeClean($_POST['email']);
Он даже не работает, но я подключил функции functions.php, и каталог верен, но не работает вообще, потому что он просто показывает пустую страницу … Если я удалю safeClean () из каждого $ _POST, это сработает.
Почему это не работает вообще?
Попробуйте использовать mysql_real_escape_string()
а не mysql_escape_string()
.
На мой взгляд, такой общий подход к санированию – это не лучший способ думать о вещах. С одной стороны, параметризованные запросы (возможно, наиболее удобные с использованием PDO) – гораздо лучший способ подойти к проблеме безопасности SQL. Но в общем …
Я знаю, что побуждение разработчика состоит в том, чтобы попытаться уменьшить количество вещей, о которых вы должны думать. Поэтому, естественно, вы хотите увидеть, можете ли вы придумать универсальную функцию санитизации, которую вы можете просто передать всем входам и не беспокоиться больше. Входы – это одна арена, хотя, если вам действительно нужна безопасность, вам нужно подумать конкретно о том, что каждая входящая часть данных должна быть и где она будет в конечном итоге. Если вы отправитесь на автопилот, вы в какой-то момент внесите проблему с безопасностью.
Почти все в коде неправильное.
get_magic_quotes_gpc неуместен, htmlentities неуместен, и даже термин «дезинфекция» используется неправильно.
На самом деле, вы не должны дезинформировать что-либо для базы данных. Но просто следуйте правилам синтаксиса.
Взгляните на очень похожий вопрос, я очень хорошо объяснил SQL-вопросы: на PHP при отправке строк в базу данных следует позаботиться о незаконных символах с помощью htmlspecialchars () или использовать регулярное выражение?
А на пустой странице вы должны изучить праймер отладки. Вы должны включить отчет об ошибках, чтобы видеть сообщения об ошибках вместо пустой страницы. Для начала вы можете обратиться к этой статье: Ссылка для запуска: http://www.ibm.com/developerworks/library/os-debug/
вы можете начать с добавления этих строк вверху вашего крипта
ini_set('display_errors',1); error_reporting(E_ALL);
и этот код для выполнения запроса:
$result = mysql_query($query); if (!$result) trigger_error(mysql_error());