PHP - безопасная отправка данных через формы для различных действий пользователя - PullRequest
3 голосов
/ 13 марта 2012

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

<form action='/somecontroller/someaction' method='post'></form>

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

<?php

$hiddenData = unserialize($this->decrypt($_POST['hiddenData'], SALT));
unset($_POST['hiddenData']);
$data = array_merge($hiddenData, $_POST);
...

В основном - как отправить некоторые данные с помощьюбезопасную форму, не подвергая ее внешним изменениям, то есть не убедившись, что что-то может пойти не так, если она будет изменена?Есть ли какая-то лучшая практика в этом отношении?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Вы никогда не отправляете эти данные клиенту вообще.

Храните его на стороне сервера в рамках возможности управления сеансом (для PHP вы можете получить доступ к нему с помощью переменной $ _SESSION) и отправлять только маркер сеанса (длинное случайное число, в PHP также есть подпрограммы для генерации / поддержки хороших идентификаторов сеансов). ) клиенту (как правило, в форме файла cookie). Для отслеживания данных в многоэтапном процессе (включая состояние, в котором находится пользователь), вы никогда не захотите предоставлять его клиенту.

1 голос
/ 13 марта 2012

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

  1. использует шифрование / дешифрование AES_256 / модифицированный AES_256 для сериализованного представления
  2. makeMD5 + SALT (или аналогичный) хэш переменных, которые можно сравнить с сохраненным хешем, чтобы определить, имели ли место какие-либо манипуляции
  3. , использовать что-то вроде IP-адреса пользователя в качестве SALT для генерации хешей или для функций шифрованиятаким образом, если IP-адрес пользователя должен измениться, вы будете знать, что (будьте осторожны: IP-адрес может измениться при некоторых обстоятельствах)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...