Имам уебсайт, който прави 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