Как предотвратить сайт от SQL-инъекций - PullRequest
2 голосов
/ 13 декабря 2010

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

Какие необходимые шаги мне нужно сделать.

ИЛИ

Какая наилучшая среда для запуска сайта, которая защищает от SQL-инъекций и кодовых инъекций?создать обсуждение с учетом.Я просто хочу знать, какой из них лучше, чтобы я мог начать с профессиональной ориентации.

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

Ответы [ 8 ]

5 голосов
/ 13 декабря 2010

Безусловно, самый надежный способ предотвратить внедрение SQL-кода - это использовать mysqli параметризованных запросов исключительно вместо построения операторов SQL вручную.

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

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

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

3 голосов
/ 13 декабря 2010

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

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]);
        }
}

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

3 голосов
/ 13 декабря 2010

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

1 голос
/ 13 декабря 2010

Вы должны посмотреть этот урок: http://www.learnphponline.com/security/sql-injection-prevention-mysql-php

1 голос
/ 13 декабря 2010

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

0 голосов
/ 23 декабря 2010

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

Избежать выходов

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

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

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

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

0 голосов
/ 13 декабря 2010

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

0 голосов
/ 13 декабря 2010

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

...