Может ли javascript имитировать нажатие кнопки?

Я проектирую сайт, где было бы проблематично, если бы макросам разрешалось свободно работать.

Я подумал о том, как остановить макрос, созданный имитацией HTTP-запросов нажатием кнопки, но это было бы напрасно, если бы они могли вставлять скрипты javascript, которые просто "click", и действовать как обычный пользователь.

Путем моделирования нажатия кнопки, я имею в виду, кнопка нажата, а кнопка "Форма" находится в запуске с ассоциированным с ним кодом php.

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

~ Эндрю

Ответы

Ответ 1

Кнопка может быть нажата программно. Например, у вас может быть страница с формой вроде этого:

<form>
    <input type="text" />
    <button>Do something</button>
    <input type="submit">
</form>

чем можно просто открыть debug cosole и тип

document.getElementsByTagName('button')[0].click();

который нажимает кнопку, или

document.getElementsByTagName('input')[1].click();

который нажмет кнопку отправки формы или просто

document.forms[0].submit();

чтобы отправить форму без нажатия кнопки.

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

Ответ 2

единственное, что вы можете сделать, это проверить запрос на сервере.

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

Что вы можете сделать, например, из:

Скажем, вы делаете javascript-игру. Вы используете AJAX для отправки оценки игрока в сервер для ведения журнала. Посмотрев на script, злоумышленник может запустить ваш код AJAX чтобы отправить счет 1 000 000, даже если они заработали всего 5000.

Вы не можете предотвратить это на стороне javascript. Тем не менее, необходимо каким-то образом аутентифицировать запросы AJAX на стороне сервера, вы можете передать "токен" безопасности на javascript, который хакер не смог получить.