Моя закладка может быть вызвана с любого веб-сайта и, в основном, позволяет пользователю вставлять строку в свою коллекцию издалека - если он вошел в систему.
Теперь я хочу включить защиту CSRF для своего сайта и с тех порБукмарклет - это, по сути, не поддельный межсайтовый запрос, я подумал о том, как отличить его от поддельных.
Это не среда с высоким уровнем безопасности, но я также заинтересован в принципе.
Я думал, что у меня есть способ сделать это, выяснил, но потом понял, что у него были проблемы в изобилии.
Оригинальная идея
- создать случайный ключ, который включен в ссылку на букмарклет,Хеш ключа сохраняется в базе данных.Случайный ключ позволяет получить доступ ТОЛЬКО к привилегии вставки в эту коллекцию и не может использоваться где-либо еще.
- букмарклет загружает более длинный скрипт с моего сервера, поэтому я мог предоставить токен предотвращения CSRF таким образом
- требует, чтобы пользователь вошел в систему
Проблемы
- Если у меня есть ключ bookmarklet, нужны ли мне токены counter-CSRF?
- Можно ли как-нибудь защитить ключ букмарклета, если пользователь щелкнет его букмарклет на вредоносном веб-сайте?
- Я не хочу, чтобы имя пользователя и пароль сохранялись в ссылке на букмарклет, потому что любой, кто имееттогда доступ к компьютеру получал бы и пароль, поэтому я выбрал случайный ключ.
- но если я храню только хэш, я не могу сгенерировать одну и ту же ссылку на букмарклет дважды, поэтому, когда пользователь хочет добавить букмарклет в другой браузер / компьютер, ему утомительно приходится импортировать ссылку из старого или прервать поддержкустарый.
- но я не должен хранить ключ открытого текста, потому что тот, кто получает доступ к базе данных, может использовать этот ключ для вставки строк в учетные записи, которые ему не принадлежат.
- Возможное решение Я мог бы попросить пользователя предоставить свой пароль в любое время, когда он создает букмарклет и хеширует пароль много раз, вставит этот хеш в URL и добавит хэш этого хеша.база данных.Но, конечно, это открывает гораздо худшие дыры в безопасности.
- Вместо этого я мог бы сделать что-то вроде "Девичья фамилия матери"
- Я не могу использовать bcrypt для хеширования из-за случайной соли, верно?Какая хеш-функция будет правильной?Или вы бы отклонили всю идею?
- Если я опущу ключ букмарклета, вредоносный веб-сайт может просто встроить букмарклет и извлечь из него действительный токен CSRF.Не так ли?
Лучшие идеи?Или у вас не может быть CSR без F?
Редактировать, указанный вариант использования
Одна вещь, о которой я просто не задумывался, - это использование iframe, предложенногоСрипати Кришнан.
Я не указал свой вариант использования, так что да, iframe - это правильное решение вышеупомянутой проблемы.
Однако на самом деле мой букмарклет в настоящий момент выполняет некоторые основные действия.с веб-сайтом во время выполнения (то есть форма уже существует, и пользователь может изменить свой выбор в DOM веб-сайта, который должен изменить форму).Я готов отклонить эту функциональность для моего варианта использования, если он окажется, что нет достаточно надежного способа отличить поддельные от не поддельных межсайтовых запросов - но я все еще заинтересован на теоретическом уровне.