Лучший способ защитить целостность запроса ajax

Я создаю веб-сайт 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
}
6
задан hampusohlsson 1 February 2012 в 22:12
поделиться