DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33661 / inTopicNo.1)  POSTとブラウザで動きが違うのはなぜでしょう?
  
□投稿者/ ヤナ 一般人(1回)-(2017/08/17(Thu) 18:11:52)
  • アイコン環境/言語:[vb.net .NET Framework4.7.0] 
    分類:[.NET] 

    いつもこちらのサイトにはお世話になっております。

    ご質問です。

    下記「POSTでデータを送信する」の内容を参考にして、自分のサイトのお問い合わせフォームに、
    POSTを送信しました。
    https://dobon.net/vb/dotnet/internet/webrequestpost.html

    googleのrecaptchaを設置してあるページでして、あえてrecaptchaのチェックボックスはオフのまま(というかチェックをプログラムでONにする方法はわからないので)POSTしました。

    上記のお問い合わせフォームに、普通にブラウザで手動で行うと、recaptchaの認証エラーで「あなたがロボットではないことを証明してください。」と返ってきます。

    しかしプログラムでPOSTしますと、返ってきたhtmlの中には、
    「あなたがロボットではないことを証明してください。」は含まれていませんでした。

    これはどうしてでしょうか?

    同じようにrecaptchaの認証エラーが返ってほしいのです。

    input type="submit" というタグが含まれていますが、これを明示的にクリックするような処理が必要なのかな?などと思うのですが、よくわかりません。

    的外れな質問でしたら申し訳ありません。

    VSは2017で、.NET Frameworkは4.7.0です。

    宜しくお願い致します。
引用返信 削除キー/
■33662 / inTopicNo.2)  Re[1]: POSTとブラウザで動きが違うのはなぜでしょう?
□投稿者/ 魔界の仮面弁士 大御所(1075回)-(2017/08/17(Thu) 18:33:45)
  • アイコン2017/08/17(Thu) 18:51:30 編集(投稿者)

    No33661に返信(ヤナさんの記事)
    > 自分のサイトのお問い合わせフォームに、
    > POSTを送信しました。
    > googleのrecaptchaを設置してあるページでして

    POST 元のページに reCHAPTCHA が設置されているのでしょうか。
    POST 先のページで reCHAPTCHA が利用されているのでしょうか。
    あるいはその両方?

    reCAPTCHA 自体は JavaScript 実装ですよね。

    WebRequst は HTTP リクエストを投げ、その応答を受け取るだけで、
    受信したデータ(HTML、JavaScript、Image 等)を解析する機能は
    ありませんが、そういう意味ではなく?


    「自分のサイトのお問い合わせフォーム」の仕様が分からないので
    何とも言えませんが、g-recaptcha-response のチェックを行うための
    処理が実装されておらず、reCHAPTCHA の認証が偽装(あるいは空)であっても
    素通りしてしまうようなサイト構成になっていたりはしないでしょうか。

    https://syncer.jp/how-to-introduction-recaptcha

    いずれにせよ、ブラウザーから正しく呼び出した場合と、
    コードから呼び出した場合とで、リクエストの内容に
    どのような差異があるのか、Fiddler 等で比較してみては如何でしょう。
引用返信 削除キー/
■33663 / inTopicNo.3)  Re[2]: POSTとブラウザで動きが違うのはなぜでしょう?
□投稿者/ ヤナ 一般人(2回)-(2017/08/17(Thu) 21:49:27)
  • アイコン魔界の仮面弁士様、お返事ありがとうございます。
    取り急ぎ、一部ご返答します。

    > POST 元のページに reCHAPTCHA が設置されているのでしょうか。
    > POST 先のページで reCHAPTCHA が利用されているのでしょうか。

    こちらのページになります。
    https://enjoyrose.net/otoiawase

    名前やメールアドレス、題名、本文を入力したものとして、POSTしています。
    なので、POST元もPOST先も同じページになります。

    > reCAPTCHA 自体は JavaScript 実装ですよね。

    自サイトはワードプレスでして、reCAPTCHAはプラグインでの実装です。
    APIキーをセットして使っていて、
    htmlのソースは次のようになっていました。この部分だけですとJavaScriptではないようです。

    <p>認証</p>
    <div class="wpcf7-form-control-wrap"><div data-sitekey="6Lc07hAUAAAAAG98c3Ey-p2LKSGjXuRdVAVNtBKo" class="wpcf7-form-control g-recaptcha wpcf7-recaptcha"></div>
    <noscript>
    <div style="width: 302px; height: 422px;">
    <div style="width: 302px; height: 422px; position: relative;">
    <div style="width: 302px; height: 422px; position: absolute;">
    <iframe src="https://www.google.com/recaptcha/api/fallback?k=6Lc07hAUAAAAAG98c3Ey-p2LKSGjXuRdVAVNtBKo" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;">
    </iframe>
    </div>
    <div style="width: 300px; height: 60px; border-style: none; bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
    <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;">
    </textarea>
    </div>
    </div>
    </div>
    </noscript>

    > WebRequst は HTTP リクエストを投げ、その応答を受け取るだけで、
    > 受信したデータ(HTML、JavaScript、Image 等)を解析する機能は
    > ありませんが、そういう意味ではなく?

    はい、解析は受け取ったhtmlをエディタソフトに貼り付け、中身を確認しています。

    > いずれにせよ、ブラウザーから正しく呼び出した場合と、
    > コードから呼び出した場合とで、リクエストの内容に
    > どのような差異があるのか、Fiddler 等で比較してみては如何でしょう。

    そうですね、ありがとうございます。基本ですよね、すみません(^_^;)
    明日、早速確認してみます。

    宜しくお願い致します。

引用返信 削除キー/
■33664 / inTopicNo.4)  Re[3]: POSTとブラウザで動きが違うのはなぜでしょう?
□投稿者/ 魔界の仮面弁士 大御所(1076回)-(2017/08/18(Fri) 15:03:14)
  • アイコンNo33663に返信(ヤナさんの記事)
    > こちらのページになります。
    > https://enjoyrose.net/otoiawase

    ページの最後の方に
     <script type='text/javascript' src='https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&#038;render=explicit'></script>
    がありますよね。これにより
     https://www.gstatic.com/recaptcha/api2/r20170808164053/recaptcha__ja.js
    を同期ロードするための <script> タグが動的に生成され、
    これによって reCAPTCHA が実行されるようです。
    もちろん WebRequest クラスで読み込んだ場合は動作しませんが。


    > htmlのソースは次のようになっていました。この部分だけですとJavaScriptではないようです。

    reCAPTCHA にはスクリプト無しで認証させるモードがあったと思いますし、
    JavaScript が無効な場合においては、提示いただいた <iframe> が読み込まれるわけですが、
    そもそも WebRequest は、iframe を自動ロードしませんね。

    なお、試しに JavaScript を無効にして実行してみましたが、今回の iframe 内には
    『JavaScript を有効にして reCAPTCHA による確認を行ってください。』
    という案内が表示されるのみであり、認証処理は動作しませんでした。


    > 「あなたがロボットではないことを証明してください。」は含まれていませんでした。

    実際に投稿していないので未確認ですが、このメッセージも、
    json 等を通じて動的にレンダリングされるものだったりはしませんか?
引用返信 削除キー/
■33665 / inTopicNo.5)  Re[3]: POSTとブラウザで動きが違うのはなぜでしょう?
□投稿者/ 魔界の仮面弁士 大御所(1077回)-(2017/08/18(Fri) 15:47:24)
  • アイコン2017/08/18(Fri) 16:02:22 編集(投稿者)

    No33663に返信(ヤナさんの記事)
    > こちらのページになります。
    > https://enjoyrose.net/otoiawase

    ちなみに IE で開いた場合、
     <form action="/otoiawase#wpcf7-f73-p74-o1" method="post" class="wpcf7-form" novalidate="novalidate">
    の下に、スクリプトによって
     <textarea name="g-recaptcha-response" id="g-recaptcha-response">
    が動的に(非表示で)配置されていました。
    ここにユーザー応答がトークンとしてセットされるようです。
    ※ JavaScript が無効な場合は、<noscript> 側に同様の仕組みがあります。


    ページを表示した直後は、この textarea の中身は空でしたが、
    reCAPTCHA での認証が終わった段階で再確認すると、
    毎回異なる 356 桁の ASCII 文字列がセットされていました。

    技術資料としてはこのあたり。
    https://developers.google.com/recaptcha/docs/verify

    条件次第では、チェックすら要らないパターンもあるようです。
    https://blog.cles.jp/item/9210


    No33661に返信(ヤナさんの記事)
    > ご質問です。
    https://matome.naver.jp/odai/2139376092030703401


    > (というかチェックをプログラムでONにする方法はわからないので)POSTしました。
    まぁ、プログラムで認証を突破できないようにするための機能ですしね。
    タイミングや回数なども判断して、自動化できないよう認証手順を変えてきたりもしますし。

    ところで、POST する際には Request Body も必要なはずですが、
    その情報は正しくセットしていますか?

    reCAPTCHA 認証無しのページに対しても正しく送信できないようでは、
    > 同じようにrecaptchaの認証エラーが返ってほしいのです。
    の検証実験以前の問題という事になってしまいますし。



    > しかしプログラムでPOSTしますと、返ってきたhtmlの中には、
    > 「あなたがロボットではないことを証明してください。」は含まれていませんでした。

    reCAPTCHA 認証以外の箇所の送信内容に問題が無かったとして、
    それでも認証エラーの類が見当たらない、ということなのでしょうか?

    だとしたら、html の中にそのメッセージがずばり書いてある保証はないので、
    「認証エラーを検出する手順」に問題があるのだと思います。
    スクリプトの多くは難読化されているので、目視チェックも困難でしょうし。

    もしくは、そもそも認証の仕組みを正しく組み込めておらず、
    未認証でも機械的に受け入れてしまっている可能性もありますが、
    プラグインとして提供されているものなら、その可能性は低いでしょう。

    さもなくば、ロボットに対しては正常にお問い合わせを受け入れたように見せかけて、
    実際には不正なリクエストとして読み捨てているのかもしれませんが、
    いずれにしても詳しいことは分かりません。
引用返信 削除キー/
■33666 / inTopicNo.6)  Re[4]: POSTとブラウザで動きが違うのはなぜでしょう?
□投稿者/ ゴア教授 一般人(1回)-(2017/08/18(Fri) 15:47:28)
  • アイコンやりたいことが分からないのですが、

    ・このサイトにプログラムから投稿したいのか?
    ・プログラム投稿で認証エラーが出て欲しいのは何故なのか?

    もし、今回の質問の意図が「ロボットアクセスしたい」
    というものである場合、様々な問題に抵触する恐れがあるため、
    回答はつかないと思います。

    その点を明確にしてもらえるでしょうか?
引用返信 削除キー/
■33667 / inTopicNo.7)  Re[4]: POSTとブラウザで動きが違うのはなぜでしょう?
□投稿者/ ヤナ 一般人(3回)-(2017/08/18(Fri) 17:58:07)
  • アイコンお世話になっております。
    魔界の仮面弁士様、詳しく検証して頂きありがとうございます。

    まず、fiddlerにて検証した結果ですが、ブラウザから送信ボタンをクリックした場合は、
    POST https://enjoyrose.net/wp-json/contact-form-7/v1/contact-forms/73/feedback HTTP/1.1
    へPOSTしていました。

    https://enjoyrose.net/otoiawase で送信ボタンをクリックしていますので、
    てっきりhttps://enjoyrose.net/otoiawaseへPOSTすれば良いかと思っていたのですが、プラグインの動作ではURLが違っていました。

    申し訳ありませんm(_ _)m


    > ページの最後の方に
    >  <script type='text/javascript' src='https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&#038;render=explicit'></script>
    > がありますよね。これにより
    >  https://www.gstatic.com/recaptcha/api2/r20170808164053/recaptcha__ja.js
    > を同期ロードするための <script> タグが動的に生成され、これによって reCAPTCHA が実行されるようです。
    > もちろん WebRequest クラスで読み込んだ場合は動作しませんが。

    > reCAPTCHA にはスクリプト無しで認証させるモードがあったと思いますし、
    > JavaScript が無効な場合においては、提示いただいた <iframe> が読み込まれるわけですが、
    > そもそも WebRequest は、iframe を自動ロードしませんね。

    承知しました。ありがとうございます。
    よくわかっておらず、すみません。

    > 実際に投稿していないので未確認ですが、このメッセージも、
    > json 等を通じて動的にレンダリングされるものだったりはしませんか?

    どうもそのように思います。これもプラグインが表示させているようです。

    >  <textarea name="g-recaptcha-response" id="g-recaptcha-response">
    > が動的に(非表示で)配置されていました。
    > ここにユーザー応答がトークンとしてセットされるようです。

    > ページを表示した直後は、この textarea の中身は空でしたが、
    > reCAPTCHA での認証が終わった段階で再確認すると、
    > 毎回異なる 356 桁の ASCII 文字列がセットされていました。

    ありがとうございます。
    認証されたら、暗号のような文字列がセットされるところですね。

    > ところで、POST する際には Request Body も必要なはずですが、
    > その情報は正しくセットしていますか?

    はい、ボディ部には、入力欄に入力するつもりの値をセットしています。
    名前やメールアドレス、題名、本文などのことですよね。

    > reCAPTCHA 認証以外の箇所の送信内容に問題が無かったとして、
    > それでも認証エラーの類が見当たらない、ということなのでしょうか?
    > だとしたら、html の中にそのメッセージがずばり書いてある保証はないので、

    はい、どうやらそのようです。返り値にセットされていると思いこんでいました。申し訳ありません。

    > もしくは、そもそも認証の仕組みを正しく組み込めておらず、
    > 未認証でも機械的に受け入れてしまっている可能性もありますが、
    > プラグインとして提供されているものなら、その可能性は低いでしょう。

    はい、こちらは大丈夫のようです。


    魔界の仮面弁士様、ゴア教授様、やりたいことは、ECサイトの買い物で、途中まで「ロボットアクセスしたい」ですが、googleの認証部分は人の手でクリアします。
    google認証を、PGで突破したいわけではありません。不可能でしょうし。

    その、人の手でクリアする部分ですが、そこを担当する外部サービスがありまして、それを利用する時にそのサービス先にPOSTで投げるのですが、その方法を検証するために、前後の動きを把握しようとしていました。


    ひとまず、上記にあげたサイトでは検証できないことがわかりました。
    ありがとうございますm(_ _)m


    引き続き検証していきますが、この質問のタイトルとは合いませんので、クローズします。そもそものPOST先が間違っていましたことと、プラグインが動作してメッセージを表示していたことで、PGから同じように動作させるのは難しいようでした。

    ありがとうございました。
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -