Не разрешать вызов функции JavaScript из адресной строки - PullRequest
3 голосов
/ 08 января 2009

Я работал с сайтом онлайн-игр. Есть некоторые события, которые вызывают функцию javascript, и у функции есть некоторое действие с обратным вызовом.

как то так,

 <input type="button" onclick="changeSomething"/>


 function changeSomething() {
         /// some call back, which changes something 
 }

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

Очень маловероятно, что кто-то сделает это, но я хочу это разрешить.

Есть ли способ предотвратить подобную ситуацию?

Спасибо.

P.S. Я пытался, но все еще не уверен, хорошо ли я объяснил это. Пожалуйста, дайте мне знать, если вы ничего не получаете.

Ответы [ 5 ]

4 голосов
/ 08 января 2009

Вы никогда не сможете получить 100% защиту от любой техники, которую вы попробуете. Это проигрышная игра.

Сказав, что один из способов приблизиться к своей цели - полностью удалить атрибут onclick и связать ваш обработчик кликов (т. Е. "ChangeSomething") с помощью javascript:

HTML:

<input id="foo" type="button" />

ЯШ:

addEvent(document.getElementById("foo"), 'click', function() {
    /// some call back, which changes something
})

Обратный вызов становится анонимным (например, больше нет функции "changeSomething"). Эти злые пользователи не могут назвать его напрямую, если не знают его имени!

Есть еще способы обойти эту технику, но мы не будем упоминать те, что не дадим идеям злодеев:)

(BTW addEvent - это просто пример библиотеки функций для добавления обработчиков событий. Я уверен, что у вас есть доступ к одному из них. Если нет , вы идете .)

3 голосов
/ 08 января 2009

Я не думаю, что с этим можно что-то сделать. Клиент может запускать все что угодно в своем браузере. Единственное, что нужно сделать, это проверить все на стороне сервера. Это важная концепция во всем веб-программировании. Код на стороне клиента может быть свободно изменен и должен рассматриваться как дополнительная проверка, чтобы ускорить процесс, а не как метод безопасности.

1 голос
/ 08 января 2009

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

Не беспокойтесь о том, что JavaScript вызывается (никак не обойтись), и сделайте ту же проверку, что и во внешнем интерфейсе. Таким образом, вы можете просто забыть о защите своего интерфейса, так как вы все равно не можете ... тем не менее, вы по-прежнему препятствуете злоумышленникам doSomething работать, когда они не должны.

Дайте мне знать, если вам понадобится дальнейшее разъяснение того, что я имею в виду, но мне нужно больше подробностей о том, на что похожа ваша архитектура приложения.

0 голосов
/ 08 января 2009

Любое «решение» будет таким же эффективным, как отключение щелчка правой кнопкой мыши на веб-странице ... Для последней проблемы я нашел по крайней мере десяток обходных путей, включая просмотр страницы в Opera!

Если вы отключите это, можно обойти Firebug, Greasemonkey или даже какой-нибудь прокси-сервер, модифицирующий HTML на лету, не говоря уже об использовании локальной копии страницы и т. Д.

0 голосов
/ 08 января 2009

Вы можете проверить источник клика, передав ID:

<input id="good' type="button" onclick="changeSomething(this.id)"/>

 function changeSomething(myId) {
   if(myId!='good') {
    return;
  }

 //......code
}

Пересмотрено на:

<input id="good' type="button" onclick="changeSomething(this)"/>

     function changeSomething(myId) {
       if(myId.id!='good') {
        return;
      }

     //......code
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...