Я создаю веб-сайт Drupal с большим количеством пользовательской информации, которая будет публиковаться с использованием jQuery / ajax. Сама по себе информация не очень конфиденциальна, просто важно убедиться, что данные формы не были изменены с помощью таких инструментов, как Firebug, а также убедиться, что информация действительно запрашивается у указанного пользователя. Другими словами, я пытаюсь найти лучший способ защитить целостность и подлинность данных при публикации с помощью ajax.
В идеале я хотел бы использовать какую-нибудь известную систему аутентификации сообщений, например алгоритм HMAC. Но поскольку он включает в себя симметричный ключ, я не понимаю, как я могу зашифровать данные POST, не раскрывая секретный ключ в моем файле javascript (который, очевидно, виден всем).
Пожалуйста, поправьте меня, если я неправильно понимаю, как это должно работать.
Например, мне нужно отправить информацию
field1=x&field2=y&uid=10
... затем вычислить хэш данных вместе с секретным ключом. Можно ли обойтись без раскрытия хэш-функции в моем коде javascript?
CHECKSUM: hash(postdata, "secret_key")
... и, наконец, добавить контрольную сумму к исходным постданным.
field1=x&field2=y&uid=1&c=CHECKSUM
Я подумал, что в качестве альтернативы я использовал идентификатор сеанса вошедшего в систему пользователя. Однако это не проверит целостность сообщения ...
При создании формы с помощью PHP я могу сгенерировать скрытый ввод с помощью следующего
CHECKSUM: hash(session id for the current user, "secretkey")
То, что я затем отправлю с помощью ajax, это
field1=x&field2=y&uid=10&c=CHECKSUM
С этим было бы довольно безопасно аутентифицировать соответствующего пользователя (опять же псевдокод)
ssid = SELECT ssid FROM sessions WHERE uid = $_POST[uid]
if(ssid && hash(ssid, "secretkey") == $_POST[c]) {
//User OK
} else {
//Invalid user
}