Im фактически новичок в использовании этой функции .. и использовал preg_replace и addslashes до обнаружения.
Мне больше всего любопытно, потому что Im собирается пройти, и ужесточить безопасность в области проводки в моем первом большом приложении, и хотел бы знать лучшие примеры, когда эта функция эффективна и настоятельно рекомендуется. Я видел, что эта функция применяется в нескольких разных ситуациях, а не только перед вводом пользовательского ввода. Но когда запросы выполняются в целом, поэтому я действительно интересуюсь его полными возможностями и как реализовать его в полной мере.
Кроме того, действительно будут оценены любые безошибочные методы безопасности и предложения в целом.
Приветствую всех!
В идеале вы никогда не должны использовать его, потому что параметризованные запросы (либо через PDO, либо mysqli ) являются правильным способом предотвращения SQL-инъекции.
Вероятно, вы должны использовать mysqli_real_escape_string или PDO с привязанными параметрами. Основное использование для любого из них – это удаление символов, таких как одиночные и двойные кавычки. Обычно это предотвращает инъекцию SQL .
Наиболее рекомендуемые времена использования mysql_real_escape_string (): всякий раз, когда вы помещаете данные в базу данных. Если вы обрабатываете входной сигнал из любого места (с веб-страницы, из базы данных, из веб-службы) в качестве враждебной атаки, которую вы должны защищать и фильтровать от проблем, тогда вы не ошибетесь
Сделайте это трудным способом первые несколько раз, затем используйте фреймворк (я использую ZendFramework) или, по крайней мере, часть его, например Zend_DB, чтобы сделать его проще для себя.
Для безошибочного метода безопасности – сервер, который не может быть разбит на:
Примечание: на данный момент это не гарантируется. это очень безопасно. Не на 100%, но так хорошо, как это получится.
И продолжайте изучать безопасность и лучшие практики.
Пожалуйста, взгляните на этот ответ на похожие вопросы некоторое время назад.
В принципе, безопасность намного выше, чем просто избежать атак SQL Injection. Кроме того, в любое время, когда вы запускаете запрос к базе данных, содержащей какие-либо динамические данные, существует опасность внедрения sql. Наконец, лучше использовать подготовленные выражения в библиотеке PDO, чем использовать mysql_real_escape_string ().
1) Безопасность strip_tags () и mysqli_real_escape_string ()
mysql_real_escape_string(magic_quotes_gpc() ? strip_slashes($variable) : $variable)
Если вы настаиваете на том, чтобы не использовать mysqli или PDO, тогда всегда.
В значительной степени в любое время могут быть символы в данных, которые могут испортить запрос, в первую очередь цитату и одиночную кавычку. Есть некоторые расширенные символы, которые зависят от вашей текущей кодировки символов MySQL, которая тоже может это сделать, поэтому вы хотите использовать ту, которая находится в mysql вместо addslashes ().
Лучше всего разобрать контент как данные, а не как код (никогда не выполнять код). Например, JSON (Javascript) – очень простой способ собрать данные с сервера на клиенте, но вы никогда не должны его выполнять. Вы должны анализировать данные с помощью регулярного выражения, чтобы подтвердить его правильность и содержать только данные.
Тем не менее, SQL-инъекция обычно происходит, когда вы принимаете данные формы в html. Ключ должен был бы проверить зарезервированные слова SQL, которые вызывают проблему, а именно:; (одинарная кавычка, точка с запятой). Вы можете легко создать список зарезервированных слов и запустить их через выражение RegEx (у jQuery, вероятно, есть что-то приятное или C # на сервере.) Я уверен, что PHP тоже может сделать это легко. CRUD (создать восстановление и удаление) глаголов приятно искать, но не забывайте о SQL-хранителях на стороне сервера, которые уже существуют, чтобы что-то делать или хуже выполнять SQL-запросы (динамический sql). Вы можете кодировать символы «escape», если вам не нужно использовать их за пределами веб-страницы.
где я его использую: я использую уровень базы данных на своих сайтах, и этот уровень проходит через весь запрос и ускользает от него. Таким образом, вход, который не отправляется в базу данных, не экранирован, но все, что происходит, сбрасывается при отправке отправки в базу данных. он также обеспечивает гораздо большую гибкость при передаче между базами данных. поэтому эмпирическое правило, которое я предлагаю, использует всю функцию mysql с оберткой базы данных. это заставляет их использовать в нужное время, и ваше приложение не будет сбой при переключении