использование открытых / закрытых ключей в javascript
Мне нужно отправить запрос ajax POST на мой сервер.
Мне нужно убедиться, что запрос исходит от самого скрипта, а не от пользователя, который сам пишет запрос. Есть ли какой-нибудь безопасный способ сделать это? Может ли скрипт подписать или закодировать запрос POST, который впоследствии будет расшифрован с помощью закрытого ключа сервера? и могу ли я каким-то образом предотвратить шифрование пользователя с помощью моего открытого ключа?
Я делаю это не только для целей фильтрации - так просто старая серверная сторона проверка просто не подойдет.
4 ответа:
Другие ответы верны: это принципиально невозможно. Возможно, лучшее, что вы можете сделать с прагматической точки зрения, - это изучить действительно неприятные способы запутать ваш JavaScript, чтобы отбить охоту у людей, которые могут попытаться взглянуть на него, но вы можете быть уверены, что кто-то мотивированный может обойти это без особых усилий. http://en.wikipedia.org/wiki/Obfuscated_code
Все, что вы делаете в Javascript, можно увидеть и проанализировать, поскольку это происходит на стороне клиента. Таким образом, шифрование информации надежно на стороне клиента практически невозможно. Таким образом, сервер остается единственной точкой, где вы можете и должны выполнить проверку.
Кроме того, какое вам дело до того, что входные данные поступают из вашего скрипта или создаются вручную пользователем? Если входные данные допустимы и разрешены в соответствии с вашими правилами, это не должно иметь никакого значения.
Для такого рода ситуаций, когда вы сомневаетесь, вам нужно увидеть важность разделения клиента и сервера. Ваш сервер - это ваше приложение, это единственный критический компонент, о котором вы должны заботиться. Каждый вход, как правило, не вызывает доверия, каждый выход должен быть именно тем, что вы намереваетесь раскрыть.
Интерфейс HTML/JS, который вы передаете пользователю, - это просто помощь для человека, чтобы общаться с вашим сервером, но это не значит, что он надежен или защищен, как только он покинул ваш сервер.