4

簡単に言うと、学校選挙の投票を記録して安全であることを確認する Google ドライブ フォームをテストしています。

共有 URL からフォームを開き、データを一覧表示/入力する方法はありますか? 要するに、投票してフォームをクラッシュさせようとするボットのように振る舞うスクリプトを書くことはできますか?

サンプル URL: http://docs.google.com/forms/d/RANDOM_STRING/viewform

4

1 に答える 1

7

編集: 2014 年末ごろ、Google フォーム サービスの変更により、このハッキングが無効になりました。Google スプレッドシートのデータを使用して Google フォームに「事前入力」することは可能ですか? を参照してくださいGoogleフォームのチェックボックスを事前に入力する方法は? Form メソッドに依存するソリューションの場合。


「ライブ フォーム」として表示される Google フォームは、フォームの通常の動作をすべて備えた単なる HTML フォームです。ライブ フォームの HTML ソースを表示し、POST 要求をシミュレートするのに役立つ情報を取得できます。

HTMLフォーム

たとえば、Spreadsheet Email Triggerのフォームを見てください。以下は、読みやすくするためにクリーンアップされたフォーム HTML です。

<form action="https://docs.google.com/spreadsheet/formResponse?formkey=#FORMKEY#&amp;ifq"

 method="POST" id="ss-form">

  <br>
  <label class="ss-q-title" for="entry_0">First Name
    <span class="ss-required-asterisk">*</span>
  </label>
  <label class="ss-q-help" for="entry_0"></label>
  <input type="text" name="entry.0.single" value="" class="ss-q-short" id="entry_0">
  <br>
  <label class="ss-q-title" for="entry_1">No of User
    <span class="ss-required-asterisk">*</span>
  </label>
  <label class="ss-q-help" for="entry_1"></label>
  <select name="entry.1.single" id="entry_1">
    <option value="5">5</option>
    <option value="10">10</option>
    <option value="20">20</option>
    <option value="30">30</option>
  </select>
  <br>
  <label class="ss-q-title" for="entry_2">Email ID
    <span class="ss-required-asterisk">*</span>
  </label>
  <label class="ss-q-help" for="entry_2"></label>
  <input type="text" name="entry.2.single" value="" class="ss-q-short" id="entry_2">
  <br>
  <input type="hidden" name="pageNumber" value="0">
  <input type="hidden" name="backupCache" value="">


  <input type="submit" name="submit" value="Submit">
  <div class="password-warning">Never submit passwords through Google Forms.</div>
</form>

このスクリーンショットでは、重要な要素がマークされています。

フォーム HTML

Google フォームの送信をシミュレートするスクリプト

アクション URL とフィールド名を使用して、UrlFetch ドキュメントの例を変更することにより、プログラムでフォームを送信する関数をコーディングできます。

// Simulate POST to form
function sendHttpPost() {

  // Copy the entire URL from <form action>
  var formAction = "https://docs.google.com/spreadsheet/formResponse?formkey=#FORMKEY#&amp;ifq";

  var payload = {
    "entry.0.single": "Nelson",            // First Name
    "entry.1.single": "10",                // No of users
    "entry.2.single": "user@example.com"   // Email ID
  };

  // Because payload is a JavaScript object, it will be interpreted as
  // an HTML form. (We do not need to specify contentType; it will
  // automatically default to either 'application/x-www-form-urlencoded'
  // or 'multipart/form-data')

  var options = {
    "method": "post",
    "payload": payload
  };

  var response = UrlFetchApp.fetch(formAction, options);
}

結果

上記のスクリプトの結果は次のとおりです。フォームの応答がスプレッドシートに追加されています。

スクリーンショット

于 2013-12-11T03:57:28.397 に答える