рельсы, как безопасно передавать данные в ajax? - PullRequest
0 голосов
/ 30 сентября 2011

Чтобы использовать некоторые вызовы AJAX, мы часто используем некоторый тип ввода = "скрытый".Но эти значения могут быть легко изменены.Итак, это встроенная функция рельсов, которая позволяет отправлять дату в AJAX, без возможности ее использования пользователем, или чем она не может быть изменена пользователем?

В моих текущих приложениях для рельсов я использую фильтры дляотменить все вредоносные действия на моих контроллерах.Я не создаю общедоступный API, поэтому мне не нужны более мощные проверки.

Но для примера у меня есть виджет apotomo, отображающий некоторые данные с использованием скрытого ввода.Но если вы измените его, вы можете получить доступ к другому набору данных.В моем случае это на самом деле не проблема, потому что все эти пользователи имеют право на доступ к этим наборам данных в любом случае.

Но это какой-то способ передавать данные для вызова ajax безопасным способом?Или единственная безопасность - это управление правами?

1 Ответ

1 голос
/ 30 сентября 2011

Все вводимые пользователем данные небезопасны, поскольку вы не можете их контролировать! Пользователям даже не нужен веб-браузер, но они могут использовать какую-то другую программу (например, curl или wget) для отправки манипулируемых данных.

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

Чтобы убедиться, что поля hidden не были изменены, вы можете использовать некоторую контрольную сумму, которая рассчитывается на стороне сервера с использованием фиксированного секретного ключа. Этот секрет никогда не должен быть открыт вашим посетителям!

 hash = md5(field_1 + field_2 + field_3 + my_secret)

Когда эти четыре скрытых поля (field_1..3, hash) поступают в вашу форму, вы можете пересчитать хэш и сравнить его с параметрами [: hash], чтобы убедиться, что поля от field_1 до field_3 не были изменены. 1011 *

...