• ベストアンサー

GETとPOST

フォームでのデータの受け渡しで質問があります。 リンクにデータを埋め込んで、GETで次ページにデータを渡すという方法があると思うのですが、本を読んだりしたところ、クロスサイトスクリプティングやSQLインジェクションの攻撃にあう可能性も指摘してあったので、何となく今まではデータの書き込みを行うファイルへのフォームデータの受け渡しは、POSTを使ってやっています。 しかしながら、POSTを使うとコードが複雑になるような気もします。GETを使うのはあまり薦められないことなのでしょうか?それとも、これらの攻撃を決定的に回避できる方法があるものなのでしょうか? アバウトな質問ですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cybert
  • ベストアンサー率56% (18/32)
回答No.4

他の方のおっしゃる通り、POSTも攻撃されます。 以下のことに注意してください。 注意点:ユーザー入力値をそのまま使っていないか? echo等の出力SQL文へ直接挿入等 解決策:ユーザー入力値は必ずサニタイズして下さい。 PHPの関数なら、HTMLspecialchars(),escapeshellarg()等 注意点:入力のチェックを行っているか? サニタイズだけでなく、例えば価格がPOSTされる場合は、数値のみです。SQLインジェクションに使われるこれらの文字は不要ですよね。" ' , &| % ? * 他 解決策:正規表現等を使い、本来入力されるべき値をチェックして下さい。

参考URL:
http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.html

その他の回答 (3)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.3

>GETを使うのはあまり薦められないことなのでしょうか? GETだろうがPOSTだろうが攻撃されることに変わりはありません。 GETの場合、URLにパラメータが出てきてしまうので、一般人でもURLのパラメータをいじるだけで比較的簡単な攻撃が出来てしまうということです。 例えば日付をパラメータにしている場合、コンピュータが処理出来ない日付や存在しない日付にしたりできますよね?GETではこのようなことがURLをいじるだけで出来てしまうと言うことです。 だからといってPOSTが安全と言うわけではなく、POSTのパラメータも知識があれば簡単に変更できてしまいます。 本当に攻撃しようとしている連中が注目する点は、送られたデータが生のまま、または簡単なチェックで処理されているのか?それともちゃんとしたチェックや変換をしているかどうかです。 なので攻撃に対する対策としては、ユーザが送ると考えられる様々データを想定することが第一歩です。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

要はどんな攻撃を受ける可能性があるから、こういう対処をしているというのを自分で分かっていればいいのです。 例えば、< を &lt; とするとか。

参考URL:
http://www.ipa.go.jp/security/awareness/vendor/programming/intro.html
  • carroll
  • ベストアンサー率61% (13/21)
回答No.1

受け取った値をちゃんと処理すれば何も恐れることはありませんよ。 検索系のものはURLをそのまま保存できたりして便利だし、ブラウザの戻るで有効期限切れとか言われることも無いですし、使うべきところではGET使った方がいいと思いますよ。

関連するQ&A