Безопасно ли использовать пользовательский ввод как key_name? - PullRequest
3 голосов
/ 11 августа 2011

Я хотел бы использовать строку, введенную пользователем в веб-форму, как часть имени ключа:

user_input = self.request.POST.get('foo')
if user_input:
  foo = db.get_or_insert(db.Key('Foo', user_input[:100], parent=my_parent))

Это безопасно?Или я должен сделать некоторые недорогие кодировки или хэш?Если да, то какой?

1 Ответ

3 голосов
/ 11 августа 2011

Это безопасно, если вы не заботитесь о том, чтобы злонамеренный пользователь заполнил вашу базу данных мусором.get_or_insert не позволит им перезаписать существующие записи, просто добавьте новые.

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

Редактировать: Вы только что прокомментировали, что действительно проверяете, что это разумноключ.В этом случае, да, это безопасно.

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

...