2

ユーザーがリンクをクリックすると、変数をフェッチして別のページにリダイレクトするコードを追加するページに誘導されるというシナリオがあります。

つまり、ユーザーがクリックします<a href="sample.tpl">click here</a>

sample.tpl で、彼を別のページにリダイレクトするコードを書きたい

<script>
window.location="http://mydomain.com/?page_id=10"

しかし、セキュリティ上の理由から、変数をURLに追加せずに、この新しいリンクで変数も送信したい

どうすれば安全な手順でそれを行うことができますか。

不明な点がある場合は、質問してください。

4

2 に答える 2

4

、渡したい値method="post"の入力、および通常のリンクとしてスタイル設定されたボタンを使用してフォームを作成できます(フォームを手動で送信する場合もあります)。hiddensubmit

次に、submit()メソッドを使用して手動またはプログラムでフォームを送信します


例(ページの読み込み後3秒後に自動リダイレクトを使用) http://jsbin.com/avacoj/1/edit

HTML

<form method="post" action="http://mydomain.com/" id="f">
   <input type="hidden" name="page_id" value="10">
   <noscript><button type="submit">Continue</button></noscript> /* see below */
</form>

Js

window.onload = function() {
  var frm = document.getElementById('f');
  setTimeout(function() {
      frm.submit();
  }, 3000);
};

補足として、タグsubmit内にボタンを挿入することを検討し<noscript></noscript>てください。これにより、ユーザーデバイスでjsが使用できない場合でもリダイレクトが可能になり、ページに引き続きアクセスできるようになります。

于 2012-10-08T08:15:34.693 に答える
4

POSTファブリツィオの回答に加えて、誰かがフォームを作成して実行時に送信できるjavascript関数を作成しました。

POSTGET変数がヘッダー経由で送信されることを除いて、(変数がURLに追加される場所)と同じです。リクエストを偽造することは依然として可能であるPOSTため、データに対して何らかの検証を実行する必要があります。

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

次のように使用します。

post_to_url("http://mydomain.com/", {'page_id':'10'}, "post");

ソース: フォーム送信のような JavaScript ポスト リクエスト

于 2012-10-08T08:20:31.370 に答える