Intereting Posts
Почему мой PHP выглядит закомментированным, когда я просматриваю его в браузере? <! -? php include ("header.php"); ? -> Как создать уникальные идентификаторы, например YouTube? Работа с PHP не дает результата Как найти аналогичное слово для PHP с ошибкой? Найти соответствующие скобки, используя регулярное выражение Список объектов в определенной папке на Amazon S3 Как создать цикл для этого выпадающего меню? Каков наилучший вариант использования языкового коммутатора в моей системе ZF2? Как извлечь структурированный текст из HTML-списка в PHP? Радиус 40 километров с использованием широты и долготы Динамический контент охватывает страницы в php Доступ к другим событиям календаря почтового ящика с помощью PHP-EWS «Не выбрал файл для загрузки» при загрузке с использованием codeigniter Захват шаблона неизвестной репликации в PCRE Php не сообщает о каких-либо ошибках в IIS7

Что значит избежать строки?

Я читал ли нужно, чтобы $ _SESSION ['username'] был экранирован перед тем, как войти в SQL-запрос? и он сказал: «Вам нужно избегать каждой строки, которую вы передаете в sql-запрос, независимо от его происхождения». Теперь я знаю, что это действительно так. Поиск Google показал более 20 000 результатов. Только у Stackoverflow было 20 страниц результатов, но никто на самом деле не объяснил, что такое экранирование или как это сделать. Это просто предполагается. Вы можете мне помочь? Я хочу учиться, потому что, как всегда, я делаю веб-приложение на PHP.

Я посмотрел: Вставка символов Escape , Что все escape-символы в Java? , Cant избежать строки с addcslashes () , символ Escape , что действительно делает mysql_real_escape_string ()? , Как я могу избежать двойных кавычек из строки в php? , MySQL_real_escape_string не добавляет косые черты? , удалите escape-последовательности из строки в php, я могу продолжить, но я уверен, что вы поняли суть. Это не лень.

Solutions Collecting From Web of "Что значит избежать строки?"

Экранирование строки означает уменьшение двусмысленности в кавычках (и других символах), используемых в этой строке. Например, когда вы определяете строку, вы обычно окружаете ее в двойных кавычках или одинарных кавычках:

"Hello World." 

Но что, если моя строка содержит в себе двойные кавычки?

 "Hello "World."" 

Теперь у меня есть двусмысленность – интерпретатор не знает, где заканчивается моя строка. Если я хочу сохранить свои двойные кавычки, у меня есть пара вариантов. Я мог бы использовать одинарные кавычки вокруг моей строки:

 'Hello "World."' 

Или я могу избежать моих котировок:

 "Hello \"World.\"" 

Любая цитата, которой предшествует косая черта, сбрасывается и понимается как часть значения строки.

Когда дело доходит до запросов, у MySQL есть определенные ключевые слова, которые он наблюдает за тем, что мы не можем использовать в наших запросах, не вызывая некоторую путаницу. Предположим, что у нас есть таблица значений, где столбец был назван «Выбрать», и мы хотели бы выбрать это:

 SELECT select FROM myTable 

Мы теперь внесли в наш запрос некоторую двусмысленность. В рамках нашего запроса мы можем уменьшить эту двусмысленность, используя обратные тики:

 SELECT `select` FROM myTable 

Это устраняет путаницу, которую мы ввели, используя плохое суждение при выборе полей.

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

 // Query $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); 

Существуют и другие методы для экранирования строк, таких как add_slashes , addcslashes , quotemeta и т. Д., Хотя вы обнаружите, что, когда целью является выполнение безопасного запроса, разработчики по большому mysql_real_escape_string предпочитают mysql_real_escape_string или pg_escape_string (в контексте PostgreSQL.

Некоторые символы имеют особое значение для базы данных SQL, которую вы используете. Когда эти символы используются в запросе, они могут вызвать непредвиденное и / или непреднамеренное поведение, в том числе позволяя злоумышленнику скомпрометировать вашу базу данных. Чтобы эти символы не влияли на запрос таким образом, они должны быть экранированы или, скажем, по-другому, в базе данных должно быть сказано не рассматривать их как специальные символы в этом запросе.

В случае с mysql_real_escape_string() он mysql_real_escape_string() \x00 , \n , \r , \ , ' , " и \x1a поскольку они, когда не экранируются, могут вызывать вышеупомянутые проблемы, которые включают SQL-инъекции с базой данных MySQL.