2010-12-13 3 views
2

Я собираюсь начать сайт с нуля с помощью PHP & MYSQL с использованием архитектуры MVC. Но в соответствии с требованиями клиента сайт должен быть предотвращен из-за вторжения SQL и INCTION.Как предотвратить сайт из SQL INJECTION

Каковы необходимые шаги, которые я должен выполнить.

ИЛИ

Какой лучший рамки, чтобы запустить сайт, который предотвращает от SQL Injection и код ИНЪЕКЦИЙ.

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

спасибо я заранее ...

ответ

3

экранировать все входные от $_GET[], $_POST[] и т.д. с mysql_real_escape_string() сразу.

1

Использовать mysql_real_escape_string при передаче строковых параметров для создания операторов SQL. Это включает числовые и т. Д. Параметры, которые вы обрабатываете как строки.

0

использование mysql_real_escape_string

+0

Почему downvote? –

+0

Я тоже не знаю. Почему? –

5

До сих пор самым надежным способом предотвращения инъекции SQL является использование mysqli параметризованных запросов исключительно вместо построения SQL заявления вручную.

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

Чтобы предотвратить инъекции кода на стороне сервера, не всегда при любых обстоятельствах использовать eval()

Для предотвращения Javascript инъекции, относиться ко всем пользовательским контентом с strip_tags() перед отображением или хранить его в БД.

+1

Я одобрил, но имейте в виду, что strip_tags не защитит вас от атак XSS. Рассмотрим htmlenitites, и если вы планируете поместить ввод в атрибут тега, также создайте сущность для '(которые htmlentities не поймают, но могут избежать ваших атрибутов) просто заменяют все на ' – DampeS8N

3

Эти две функции помогут вам:

function escape($escape) 
{ 
    $escape = mysql_real_escape_string($escape) ; 
    return $escape ; 
} 

function _INPUT($name) 
{ 
    if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
     return strip_tags($_GET[$name]); 
     } 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     return strip_tags($_POST[$name]); 
     } 
} 

Отправить все с функцией бегства() в дБ и захватить все формы с _INPUT(). Вы можете использовать функцию _INPUT для каждого $ _POST или $ _GET, за исключением булевых функций, таких как empty ($ _ POST ['name']) или isset ($ _ POST ['name']) и т. Д.

0

Лучший способ сделать это заключается в использовании подготовленных инструкций, бар нет. Это не позволит вам сдать код и сбалансировать все самостоятельно. PHP mysqli имеет это встроенное в него и является хорошим первым шагом в этом мире. Посмотрите на PHP manual page.

0

После всех хороших советов, приведенных здесь, в том, что вы избегаете своих пользовательских данных перед тем, как поместить их в базу данных, вы должны как-то подумать со второй стороной проблемы.

Побег выходы

Это означает, что каждый выход вашего приложения должны быть экранированы на основании правила этого формата вывода. Например, когда вы эхо-код для HTML-страницы вы должны избегать его с помощью htmlentites, так что любой HTMl, содержащийся в ваших данных, не будет html в выводе. И для выхода csv вы должны избегать цитат или запятых, для JSON вам также следует избегать вещей, и т. Д. Каждый выход имеет свои правила.

Эта вещь когда-то используется для хранения данных, которые потенциально опасны (код js, код HTML) в БД, только предотвращая внедрение SQL перед вставкой. И затем убедитесь, что он правильно экранирован до выхода.

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

Говоря о фреймворках, вы должны взглянуть на Zend Framework на Zend_Filter, Zend_Validate и функции escape на представлениях.

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