小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

にせリンク

アンカー(A要素)で引数を記述すると、ブラウザのアドレス欄に引数が丸見えになりますね。
そんな時は、以下のようにフォームとJavaScriptを使い、にせリンクで対応すれば、hiddenで渡せるので、少しセキュリティが上がります。
ポイントは、HTTPメソッド(form要素のmethod属性)を『POST』にします。ここを『GET』にするとA要素と同じになってしまいます。

<html>
<head>
<title>サンプル</title>
<script type="text/javascript">
    function LinkLike(fm, target) {
        if (target != '') {
            document.forms[fm].target = target;
        }
        document.forms[fm].submit();
    }
</script>
</head>
<body>
<p><a href="test01.htm?aaa01=97&aaa02=98" >普通のリンク</a></p>
<form method="POST" name="aaa" action="test01.htm">
<div>
<a href="javascript:void(0)" onclick="LinkLike('aaa', '_self'); return false;">にせのリンク</a>
<input type="hidden" name="aaa01" value="97" />
<input type="hidden" name="aaa02" value="98" />
</div>
</form>
</body>
</html>

サンプルでは、test01.htmはhtmlですが、実際はCGIを指定します。
また、LinkLike関数の引数は、第1引数にform要素のname属性の設定値、第2引数にターゲット名を指定します。
ターゲット名で、フレームで無い場合は、'_self'を指定します。

追記(2010/01/05)

コメントで以下のご指摘を頂きました。
確かに、上記とトレードオフですね。

  • 「新しいウィンドウ (タブ) で開く」「リンク先の URL をコピー」等のコンテキストメニューが全滅し、また Shift + クリックや中クリックによる別窓表示ができなくなるなど、ユーザが取り得る操作を大きく制限することになります
  • リンク先のページをブックマークすることも、リンク先のページに直リンクを張ることもできなくなり、ユーザの再訪問を著しく妨げます (Amazon の商品検索結果ページから各商品詳細ページへの遷移でもし同じ事をやられたら…)
  • (JavaScript を解釈できるような高度なものを除き) 検索ロボットがリンク先をクロールできなくなり、SEO 的に致命的です
  • 元々 POST はサーバ側のデータを変化させることを目的として使うものとして設計されているので、GET と異なりプロキシサーバが結果をキャッシュしません。このためネットワーク利用効率やユーザの快適性に悪影響を及ぼします。


セキュリティ的にもテキストを単にhiddenでは、確かに問題がありますね。
特に、パスワードやキーになる情報は、暗号化してからhiddenですか…。