У меня есть веб-сайт, который делает вызовы AJAX к серверному скрипту при нажатии кнопки. Единственная проблема заключается в том, что пользователь может ввести в адресную строку следующее:javascript:callAjaxRoutine();
Как мне предотвратить это?
Как запретить пользователям использовать ссылки JavaScript
Ответы (1)
Люди в комментариях правы, говоря, что вы никогда не сможете вывести кого-то из своего кода на 100%, но вы можете сделать несколько вещей, чтобы предотвратить менее серьезные проблемы:
- Инкапсулируйте свою функцию в объект, чтобы она не находилась в глобальном пространстве имен,
- Запутать свой код
No 1
это случай: (здесь я буду использовать jQuery, но это не обязательно, просто укорачивает код)
Вместо:
<script>
var callAjaxRoutine = function () {
// Do ajax
ajax();
}
$('#button').on('click', callAjaxRoutine);
</script>
Вы берете функцию из глобального пространства имен и помещаете ее внутрь объекта:
<script>
// This sets up an object containing a self-executing function
(function () {
var callAjaxRoutine = function () {
// Do ajax
ajax();
}
$('#button').on('click', function () {
callAjaxRoutine.apply(this);
});
}());
</script>
Второй блок кода будет делать то же самое, что и первый, код по-прежнему вызывается при запуске события, но ввод callAjaxRoutine
в консоль покажет undefined
из-за закрытия функции, которая существует только для объявления и назначения callAjaxRoutine
в качестве события. обработчик событий для #button.click()
javascript:callAjaxRoutine();
ничего не сделает, так как доступный callAjaxRoutine
больше не определен.
No. 2
поместите свой код через минимизированный/обфускатор, такой как http://jscompress.com - вторая часть кода выше становится:
(function(){var e=function(){ajax()};$("#button").on("click",function(){e.apply(this)})})();
Чем больше функция, тем сложнее ее читать и понимать. Если у вас есть такой инструмент, как firebug, вы можете разобрать его на части, но это очень сложно сделать, так что вы отговорите большинство.
addMoney(100000)
в клиент. Вместо этого у вас будет какая-то функция transferFunds(from,to,amount). какая операция (которую ваш веб-сервис выставляет на всеобщее обозрение) может вызвать такую проблему? - person Shanimal   schedule 20.04.2013