Внедрение кода с помощью PHP - PullRequest
2 голосов
/ 16 марта 2011

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

if ($i == $_POST['userinput']) {
    ....
}

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

Очевидно, что это нене работает в приведенном выше примере, но просто пытается помешать людям делать что-то вроде include ('what.php');и т.д.

Ответы [ 5 ]

4 голосов
/ 16 марта 2011

Сравнение с переменной, как вы показываете, само по себе не опасно, поэтому не о чем беспокоиться.

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

1 голос
/ 16 марта 2011

Данные, поступающие от пользователей, потенциально опасны, но это не значит, что они опасны всегда - это зависит от того, что вы с ними делаете.

ХотяФильтрация / внесение в белый список / дезинфекция данных - это всегда хорошая практика, абсолютный минимум, который вы должны сделать, - это избегать его непосредственного использования для действий, которые активно взаимодействуют с окружением: работа с файловой системой (включает в себя, fopen, file_ (get | put) _contents и т. д..), база данных, генерирующая вывод HTML и т. д.

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

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

1 голос
/ 16 марта 2011

Если вы не вызываете eval или аналогичные функции, которые создают и запускают реальный код PHP из строки, такой как create_function, вам обычно не нужно беспокоиться о фактическом внедрении кода.

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

1 голос
/ 16 марта 2011

по сравнению с пользовательскими переменными это нормально, они просто обрабатываются как строки.в отношении вашего include('whatever.php') примера используйте белый список для защиты от него:

if(!in_array($userinput, array('libs.php', 'my.php'))) {
  die('sorry pal');
}
0 голосов
/ 16 марта 2011

Как отдельная строка, это нормально. Добавлять косые черты все еще безопаснее, чтобы такие символы, как ' и " не конфликтовали.В основном это опасность для баз данных SQL.

...