Как я мог сделать это в PHP $_POST, где более безопасно? -Или это уже безопасно?


На большинстве мои данные $_POST, где вводятся на моем сайте я использую следующий PHP:

$example = $_POST['textfield'];
$example = strip_tags($example);
$example = mysql_real_escape_string($example);

И тогда мне будет взаимодействовать с базой данных MySQL...

Это 'безопасные' / 'безопасный'?

Каких-либо серьезных уязвимостей в коде выше?

-Как я мог бы сделать его безопасным?

Большое спасибо.



425
1
задан 10 июля 2011 в 05:07 Источник Поделиться
Комментарии
3 ответа

Я рекомендую приобрести себе простой, простую функцию, которая использует PDO и параметризация запросов по умолчанию за кадром.

Вот несколько примеров использования функции запроса, использовать PDO в фоновом режиме, что я использую все время:

$iterable_resultset = query('select * from users where email = :email and username ~* :username or user_id = :user_id', array(':email'=>$email, ':username'=>$username, ':user_id'=>(int)$user_id));
// Results a resultset that is able to be foreached over.

$multidimensional_array = query_array('select * from users where email = :email and username ~* :username or user_id = :user_id', array(':email'=>$email, ':username'=>$username, ':user_id'=>(int)$user_id));
// Results in a multidimensional array with each subarray corresponding to a database row, or null.

$row_of_data = query_row('select * from users limit 1');
//Results in a single dimensional array or null.

$item = query_item("select max(score) from players where username ~* :username", array(':username'=>$username));
// Returns a single piece of information, or null.

Есть большое преимущество с точки зрения рефакторинга, чтобы иметь простую функцию на основе параметризации запросов SQL. PDO часто многословны, и иногда, когда ты приобретаешь плохой код вам нужен простой, немногословный функции, чтобы поместиться в старом mysql_query() звонки и тому подобное.

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

$untrusted_input = @$_REQUEST['password'];

это все, что вы должны сделать при получении входного сигнала. Не удаляет тэги, не делай ничего, пока не придет время для использования- это ненадежные входные данные в SQL или в HTML:


  • В SQL, настроят ее, а с помощью SQL-фильтр/изменить сведения в зависимости от обстоятельств.

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

Вот пример кода, повернув несуществующий получить/пост переменной (которая обычно выдается в нуль) в пустую строку, для всего лишь первой из многих тонких вещей, которые случаются, когда вы бежать слишком рано: http://ideone.com/r7bSr

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

ТЛ;ДР; - создать шаблонизатор, он поможет вам, используя лучшие практики быстрее.

1
ответ дан 20 июля 2011 в 04:07 Источник Поделиться

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

0
ответ дан 11 июля 2011 в 12:07 Источник Поделиться

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

Если включен magic_quotes будут бежать все цитаты с обратной косой черты, и каждый слеш-слеш.

Подробнее о magic_quotes здесь.

-1
ответ дан 11 июля 2011 в 09:07 Источник Поделиться