использование открытых / закрытых ключей в javascript


Мне нужно отправить запрос ajax POST на мой сервер.

Мне нужно убедиться, что запрос исходит от самого скрипта, а не от пользователя, который сам пишет запрос. Есть ли какой-нибудь безопасный способ сделать это? Может ли скрипт подписать или закодировать запрос POST, который впоследствии будет расшифрован с помощью закрытого ключа сервера? и могу ли я каким-то образом предотвратить шифрование пользователя с помощью моего открытого ключа?

Я делаю это не только для целей фильтрации - так просто старая серверная сторона проверка просто не подойдет.

4 2

4 ответа:

Другие ответы верны: это принципиально невозможно. Возможно, лучшее, что вы можете сделать с прагматической точки зрения, - это изучить действительно неприятные способы запутать ваш JavaScript, чтобы отбить охоту у людей, которые могут попытаться взглянуть на него, но вы можете быть уверены, что кто-то мотивированный может обойти это без особых усилий. http://en.wikipedia.org/wiki/Obfuscated_code

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

Кроме того, какое вам дело до того, что входные данные поступают из вашего скрипта или создаются вручную пользователем? Если входные данные допустимы и разрешены в соответствии с вашими правилами, это не должно иметь никакого значения.


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

Интерфейс HTML/JS, который вы передаете пользователю, - это просто помощь для человека, чтобы общаться с вашим сервером, но это не значит, что он надежен или защищен, как только он покинул ваш сервер.

Мне нужно будет убедиться, что запрос исходил из сценария сам, а не от пользователя пишу просьба его / ее самого.

С точки зрения вашего сервера "скрипт" и "пользователь" неотличимы. То, о чем вы просите, принципиально невозможно.

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