2012-03-10 11 views
1

私はSQLインジェクション、XSS、その他のセキュリティ上の問題について読んだことがあり、会社のサイトを保護するために何を使用するかを検討しようとしています。おそらく危険なテキスト入力処理

私たちは、ユーザーエクスペリエンスを高めるためにサイトを改善する方法をユーザーに教えることができるように、簡単な「ユーザーフィードバック」フォームをテキストエリアに展開しようとしています。

ユーザーがフォーム上で「送信」を押すと、ユーザーからテキストエリアのコメントを読み取り、そのユーザーのサブフォルダにファイル名をプログラムで作成し、そのコメントをファイルに保存します。次に、そのユーザーのデータベースレコードにファイル名とパスを追加します。

チームはセキュリティ上の問題を心配していませんが、私はそうです。私たちはファイル名を作成します。ユーザー入力に基づいて0%です。このUserX commentsファイル名とデータベースへのパスをユーザーに直接与えることなく、リスクはありません。

私の関心事はデータベースの活動ではないということです。彼らが正しいので、私たちは私たち自身のファイル名を作成してdbレコードに格納するので、データベースレコードに何を書き込むのかには何の役割もありません。

私の心配はテキストファイルです!

私は小規模なチームにセキュリティを使用してコードを書き換えて、テキストエリアのユーザーのコメントをテキストファイルに書き込むよう訴えています。

私の関心事は、実際にユーザーのフィードバックを読んで、これらのテキストファイルを開いて後で読むことを予定しているからです。テキストエリアに悪いものがあるかもしれません。

私はstrip_tags()を使用することを主張していますが、テキストエリアの入力を害する方法についての情報を聞く必要があります。strip_tags()はここに行く方法ですが、新しいユーザー入力を嫌う私はhtmlspecialchars()を見ただけで、 '&'のような特定の文字を& などに変換します。

ウェブサーバー上のファイルに書き込む前に、ユーザーがテキストエリアに入力するテキストを他の方法で確認/安全にする方法はありますか?

+0

'htmlspecialchars'は' <' and '> 'を' < 'と' > 'に変換します。これは、任意のhtmlが使用入力から表示されないようにするのに十分です。 – kirilloid

+2

私はこれが質問に答えると思います:なぜあなたはデータベースではなくテキストファイルにこれらを保存していますか? –

+0

AM - 良い質問 - これは100%の新機能なので、どのくらい使用するのかわからないので、セキュリティ問題などを処理するためのコードとデータベースの改造は追加していませんが、それはサイトのあまり頻繁に使用されていない機能であることが判明し、データベースに格納する方がより良いかもしれません。 – wantTheBest

答えて

3

strip_tagsのように見えるのが良い方法です。私はまた、Webルートの外にファイルを書くことで、ブラウザからアクセスできないようにすることをお勧めします。 参照:This Other Thread

+0

+1「ウェブルートの外側」 - ダニャビットは良いアドバイスです - ありがとうございます。 – wantTheBest

1

mysql_real_escape_string()を使用して引用符を取り除くだけです。あなたがjsファイルを心配しているなら、htmlentities()。それはそれがそこに着くのと同程度に良好でなければならない。

+0

あなたのもう一つに追加する+1は、real_escape_string()を使用するとは思わなかった - ありがとう。 – wantTheBest

+0

+1 @wantTheBest一般的な引用符とmysql_real_escape_string()が特にそうするものは何ですか? –

0

サニタイズ入力は、特定の文字を削除することによってSQLインジェクションからユーザを保護します。ただし、これらの文字はテキストファイル内で悪意のある行為をすることはできません。私はマルウェアについてかなり知っているし、私を信じて、あなたはここで危険にさらされていません。

編集:私は何とか私のとりとめを通じて、この記事のポイントを逃した場合

、私はので、私は私の答えを更新することができます知っているようです。

+0

+1安堵のためにインスピレーションを与えてくれてありがとう。潜在的に危険なものをディスクに書き込んでいないファイルを作成する前に知っていても、気分が気に入っていると思います。 – wantTheBest

+0

問題はなく、あなたは確かにそうではありません。ファイルを実行可能ファイルとして保存する必要があります。また、悪質なスクリプトを実行するのに十分なデータが侵入する可能性はありません。 –

2

ファイルをどのように作成しているのか、それを読んだ後で何をしているのかによって異なります。

ファイルの書き込みにPHPのネイティブ関数を使用している場合は、remote code executionに問題はありません。

読んだ後でも、HTMLでユーザーに表示されている場合は、htmlentities()を使用すると、テキスト内のHTMLタグを効果的に消してユーザーに正しく表示できます。

データベースへのクエリの一部として使用している場合は、SQLに連結する前にそのデータベースのクリーニングルーチンを使用する必要があります。 (MySQLの場合はmysql_real_escape_string()、PostgreSQLの場合はpg_escape_string())。

the OWASP pageの情報もご覧ください。

編集:一言引用するのを忘れていましたが、一重引用符の挿入を防ぐためにENT_QUOTESとhtmlentitiesも使用する必要があります。

+0

はい、基本的にJavaScriptの変数にテキストエリアの '値'を読み込み、それをPHPのファイル関数を使ってテキストディスクベースのファイルに保存しています。当初、すべてのフィードバックを読んで、私たち全員にプレゼンテーションを行い、必要なもの(多くのユーザーが欲しい/不平を言いたいこと)が何であるかを優先させることは、チームの回転タスクです。 – wantTheBest

+0

「送信」を押してもユーザーはコメントを見られないと言わなければなりません。そのコメントは単にディスクファイルに保存され、チームメンバーはそれらを読み込みます。ユーザーが以前に投稿したコメントを読んだり編集したりするためのUIはありません。 – wantTheBest

+0

+1 Nathanは素晴らしいリンク - 特にOWASPサイト - このサイトのセキュリティは大きな大きな範囲です。現時点では、私たちのサイトと関連する作業がいくつかあります。 – wantTheBest

3

SQLインジェクションについて心配しておらず、SQLが消されていることやテキストファイルに保存していることが原因でないと思われる場合、もう1つの問題は可能なXSSです攻撃。

これを無視するのは簡単ですが、あなたに直接影響するものではありません。 XSS攻撃は、クライアントサイドのスクリプトをWebページに挿入する攻撃です。データベースは正常に動作し、サーバーファイルは変更されず、セッションファイルも変更されません。

この脆弱性は完全にクライアント側です。私が言ったように、あなたのサーバーには影響しません。しかし誰か(つまり私)があなたのウェブサイトにアクセスし、完全にSFWの信頼できるウェブサイトを見ながら突然すべてがWarezサイトにリダイレクトされます。あなたはユーザーからの信頼を失います。あなたのサイトをクロールする検索エンジンは、あなたに有害な可能性があるとマークします。あなたは交通を失う。あなたは収入を失う。それでは、あなたのサーバーはまあまあです。

あなたは間違いはバックこのため、ユーザーに出力されたユーザの入力をサニタイズする必要があります。はい、strip_tagsは解決策ですのでhtmlspecialcharsまたはhtmlentitiesです。それはあなたがあなたのユーザーが大胆links、またはイタリックのように、自分の記事に挿入できるようにしたいと思い、いくつかのタグを定義することができますので、

strip_tagsは、しかし、少し制限の少ないです。

結論として、あなたはこの練習を強く主張しています。自分自身(自社のサーバー)に直接影響することはありませんが、ワールドワイドウェブ上で信頼できる存在を望む場合は、いつでも影響を与えます。

私はこれがちょうどstrip_tagsに示唆すべき他の人よりも長い答えかもしれないことを知っています。彼らは絶対に正しかったので、私はそれらをupvoted。そこにいくつかの "企業"の議論をしようとしているだけです。 :)

+0

+1ありがとうございます。クライアントサイドのスクリプト注入(XSSのような音です)。私はそれを読み上げるつもりです。上記で提案されたようにいくつかの時点でこのプロジェクトが開始されると、プロジェクトはどのサイトと同様に進化します。最終的に、この「ユーザーフィードバック」入力は「送信」後にユーザーが表示および編集できるようになり、 - クライアント側のスクリプト注入。 「これによりユーザに出力されるユーザ入力を間違いなく消毒する必要があります。」その説明をありがとう。 – wantTheBest

0

私は開発チームのイデオロギーの主流に従った解決策を持っています:
管理者を含む、あなたのサイトでユーザー認証を使用しないでください。したがって、XSSもあなたを害することはありません。

関連する問題