Подобный поджигателю отладчик для Google Chrome

Каждый ответ здесь охватывает только часть проблемы. На самом деле существует четыре разных части запроса, которые мы можем добавить к ней динамически:

  • строка
  • номер
  • идентификатор
  • ключевое слово синтаксиса.

и подготовленные операторы охватывают только 2 из них

. Но иногда нам приходится делать наш запрос еще более динамичным, добавляя операторы или идентификаторы также. Таким образом, нам понадобятся разные методы защиты.

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

$orders  = array("name","price","qty"); //field names
$key     = array_search($_GET['sort'],$orders)); // see if we have such a name
$orderby = $orders[$key]; //if not, first one will be set automatically. smart enuf :)
$query   = "SELECT * FROM `table` ORDER BY $orderby"; //value is safe

Однако есть еще один способ защитить идентификаторы - экранирование. Пока вы указываете идентификатор, вы можете избежать обратных звонков внутри, удвоив их.

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

Итак, чтобы сделать длинный рассказ коротким: это заполнитель, не подготовленное заявление можно рассматривать как серебряную пулю.

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

Тем не менее, есть проблема с ключевыми словами синтаксиса SQL (например, AND, DESC и т. д.), но белый список - единственный подход в этом случае.

Обновить

Несмотря на то, что существует общее согласие в отношении наилучшей практики защиты SQL-инъекций, все еще существует множество плохих методов. И некоторые из них слишком глубоко укоренены в умах пользователей PHP. Например, на этой самой странице есть (хотя и невидимые для большинства посетителей) более 80 удаленных ответов - все они удалены сообществом из-за плохого качества или продвижения плохих и устаревших практик. Хуже того, некоторые из плохих ответов не удаляются, а скорее процветают.

Например, там (1) являются (2) еще (3) many (4) отвечает (5) , в том числе второй наиболее ответный ответ , предлагающий вам ручное стирание строки - устаревший подход, который оказался небезопасным.

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

Я думаю, что все это из-за одного очень старого суеверия, поддержанного такими авторитетами, как OWASP или PHP manual , который провозглашает равенство между тем, что «ускользает» "и защита от SQL-инъекций.

Независимо от того, что написано в руководстве по PHP, *_escape_string ни в коем случае не делает данные безопасными и никогда не предназначались. Помимо бесполезности для любой части SQL, отличной от строки, ручное экранирование неверно, поскольку оно является ручным, как автоматическое.

И OWASP делает это еще хуже, подчеркивая, что пользовательский вход пользователя является совершенно бессмысленным: таких слов в контексте защиты от инъекций не должно быть. Каждая переменная потенциально опасна - независимо от источника! Или, другими словами, каждая переменная должна быть должным образом отформатирована, чтобы быть помещенной в запрос - независимо от источника. Это вопрос назначения. В тот момент, когда разработчик начинает отделять овец от коз (думая, является ли какая-то конкретная переменная «безопасной» или нет), он делает свой первый шаг к катастрофе. Не говоря уже о том, что даже формулировка предполагает, что в точке входа происходит массовое ускорение, напоминающее очень волшебную функцию кавычек - уже презренный, устаревший и удаленный.

Итак, в отличие от любого «экранирования» подготовленные операторы мера, которая действительно защищает от SQL-инъекции (если применимо).

Если вы все еще не уверены, вот пошаговое объяснение, которое я написал, The Hitchhiker's Guide на SQL Injection Prevention , где я подробно объяснил все эти вопросы и даже составил раздел, полностью посвященный плохим практикам и их раскрытию.

278
задан DarkReaper 24 March 2014 в 18:30
поделиться

9 ответов

Есть подобный Поджигателю инструмент, уже встроенный в Хром. Просто щелкните правой кнопкой мыши где угодно на странице и выберите, «Проверяют элемент» из меню. У хрома есть графический инструмент для отладки (как в Поджигателе), таким образом, Вы можете отладить JavaScript. Это также делает проверку CSS хорошо и может даже изменить CSS, предоставляющий на лету.

Для получения дополнительной информации, см. https://developers.google.com/chrome-developer-tools /

244
ответ дан Rob W 23 November 2019 в 02:04
поделиться

Или попробуйте пользовательские сценарии: http://dev.chromium.org/developers/design-documents/user-scripts

4
ответ дан kenorb 23 November 2019 в 02:04
поделиться

Firebug Облегченные поддержки для осмотра элементов HTML, вычисленного стиля CSS, и многое другое. Так как это - чистый JavaScript, это работает во многих различных браузерах. Просто включайте сценарий в свой источник или добавьте bookmarklet к своей панели закладки для включения его на любой странице одним щелчком.

http://getfirebug.com/lite.html

37
ответ дан gregers 23 November 2019 в 02:04
поделиться

Ну, можно включить скрипты Greasemonkey для Google Chrome, так что, может быть, есть способ вроде как установить Firebug с помощью этого метода? Firebug Lite также будет работать, но это не то же самое ощущение, что и при использовании полнофункционального: (

willshouse.com/2009/05/29/install-greasemonkey-for-chrome-a- better-guide /

3
ответ дан 23 November 2019 в 02:04
поделиться

Вы можете установить этот букмарклет на «Панели закладок», чтобы Firebug lite всегда был доступен в браузере Chrome / Chromium (укажите это как URL-адрес):

javascript:var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);
9
ответ дан 23 November 2019 в 02:04
поделиться

Попробуйте, он называется Firebug Lite и, очевидно, работает с бета-версией Chrome.

Вы также можете найти его по адресу: https://chrome.google.com/extensions/

12
ответ дан 23 November 2019 в 02:04
поделиться

Официальный расширение Chrome Firebug или вы можете загрузить и упаковать расширение самостоятельно.

https://getfirebug.com/releases/lite/chrome/

4
ответ дан 23 November 2019 в 02:04
поделиться

Это не ответ на ваш вопрос, но, если вы его пропустили, для Chrome теперь доступен Web Developer Криса Педерика: https://chrome.google.com/extensions/detail / bfbameneiokkgbdmiekhjnmfkcnldhhm .

3
ответ дан 23 November 2019 в 02:04
поделиться

jQuerify - идеальное расширение для встраивания jQuery в консоль Chrome. Оно настолько простое, насколько вы можете себе представить. Это расширение также указывает, был ли jQuery уже встроен в страницу.

Это расширение используется для встраивания jQuery на любую страницу, которую вы хотите. Он позволяет использовать jQuery в оболочке консоли (вы можете вызвать консоль Chrome, нажав Ctrl + Shift + j ».).

Чтобы встроить jQuery в на выбранной вкладке нажмите кнопку расширения.

4
ответ дан 23 November 2019 в 02:04
поделиться