используя открытые / закрытые ключи в JavaScript - PullRequest
2 голосов
/ 22 февраля 2010

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

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

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

Ответы [ 4 ]

9 голосов
/ 22 февраля 2010

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

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


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

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

5 голосов
/ 25 февраля 2010

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

4 голосов
/ 22 февраля 2010

Мне нужно убедиться, что запрос возник из скрипта сам, а не из написания пользователя просьба самому себе.

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

0 голосов
/ 22 февраля 2010

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

...