質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

意見交換

クローズ

2回答

835閲覧

JavaScript コンソールからボタンのクリックを無効

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/03/11 00:32

0

1

コンソールからdocument.querySelector("#submit").click()によるクリックが行われたか、
ページ内からボタンをクリックしたか判定したく下記コードを書きました

ページ内からボタンをクリックしたかの判定はマウス座標がボタン内にあるかで判定します

私的には完全なロジック(自己満足できた)なつもりですが、
プロの方から見てどうなのでしょうか
穴などあればご意見いただければ幸いです

<script> window.onload=function(){ let submit_button=document.querySelector("#submit"); clientRect = submit_button.getBoundingClientRect() ; x = window.pageXOffset + clientRect.left; y = window.pageYOffset + clientRect.top; xx=x+submit_button.clientWidth; yy=y+submit_button.clientHeight; } function submit_event(){ if(event.clientX>=x&&event.clientX<=xx&&event.clientY>=y&&event.clientY<=yy){ alert("ページ内からクリック"); }else{ alert("コンソールから実行"); } } </script> <input id="submit" type="submit" onclick="submit_event()">

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答2

#1

maisumakun

総合スコア145183

投稿2023/03/11 04:13

コンソールからdocument.querySelector("#submit").click()によるクリックが行われたか、ページ内からボタンをクリックしたか判定したく

何を目的としてそのようなことをやっているのでしょうか?

少なくとも、本気になった攻撃者に対しては、ブラウザサイドで実行されるJavaScriptで行われる処理を隠蔽・防御することは困難もしくは不可能です。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

think49

総合スコア18162

投稿2023/03/12 06:14

判定ロジック上の落とし穴

  • Google Chrome 111.0.5563.65でsubmitボタンの下端ぎりぎりをクリックすると「コンソールから実行」がalertされます。
  • キーボード操作でsubmitボタンをクリックすると、「コンソールから実行」がalertされます。
  • コンソールで下記コードを実行すると「ページ内からクリック」がalertされます。

javascript

1document.querySelector('#submit').dispatchEvent(new MouseEvent('click', { 2 clientX: x, 3 clientY: y 4}));

自由と制約

セキュリティ上の制約を除いて、Web制作側からブラウザに制約を設ける機能は基本的に実装できないと思った方が良いでしょう。
ユーザの自由な行動を阻害しないようブラウザは設計されています。

コンソールから実行できないようにするのではなく、コンソールから実行されても問題がないコードを書くのが正攻法と考えます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問