Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Родмена значений (https://javascript.ru/forum/dom-window/40652-rodmena-znachenijj.html)

zzzzzz 14.08.2013 14:02

Родмена значений
 
Ошибся:) Подмена значении

Добрый день друзья.

<td target="look" onclick="А('/files/1/cloud/style')">текст</td>

При клике запускаю функцию А с аякс где переданный параметр в зависимости от условия разбивается или передается целиком на сервер.

Передаваемый параметр не статичен и может принимать разные формы.

Проблема.
Я нехороший пользователь, через firebug ищу эту A и меняю допустим в параметре cloud на cloud1 или cloud_t.
И получается на сервер выполняется не то что нужно, что есть потенциальная ошибка.

Проверить принимаемые данные посчитал не целесообразным т.к cloud1 и cloud_t и другие вариации допустимы

Поэтому хотел бы спросить. Возможно ли скрыть или еще что-нибудь сделать, чтобы невозможно было подменить отправляемые данные

Заранее спасибо

Makarov 14.08.2013 14:11

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

danik.js 14.08.2013 14:28

Цитата:

Сообщение от zzzzzz
Поэтому хотел бы спросить. Возможно ли скрыть или еще что-нибудь сделать, чтобы невозможно было подменить отправляемые данные

Невозможно by design. То что идет от клиента - идет от клиента. А клиент че хочет то и шлет. Вот как по твоему можно запретить чужому компьютеру что-то тебе (твоему серверу) слать?

zzzzzz 14.08.2013 14:58

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

Получается придется на сервере делать проверку из кучи if-else только для того чтобы проверить один переданный параметр. Ну как так :(

danik.js 14.08.2013 15:21

Цитата:

Сообщение от zzzzzz
Получается придется на сервере делать проверку из кучи if-else только для того чтобы проверить один переданный параметр. Ну как так

Естественно. А все потому это единственный безопасный вариант.
Что такое JS? Это просто набор строк интерпретируемого кода. Твой сервер как бы говорит: Привет Клиент, вот тебе код, ты его исполни у себя, и верни результат. Но только не обмани меня, хорошо?

А клиент, как бы отвечает: Ок, Сервер, обещаю. (а в мыслях: ага, блядь, щас. Не на*бешь - не проживешь.) Вот тебе путь, который ты просил:
'/etc/passwd/'.

А сервер: О, спасибки. Это то, что я думаю? Путь к нужному в работе файлу? Ок, отображу его содержимое тебе..

Вот из-за такого доверия и "взламывают" сервера...

Kvark 14.08.2013 15:25

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

zzzzzz 14.08.2013 15:34

Крот мне в ухо, danik.js это было познавательно ))
Всем спасибо, пойду над шифрованием подумаю


Часовой пояс GMT +3, время: 06:19.