2011-02-09 7 views
1

私はWebサイトを持っているので、ユーザーの入力によって/home/content/s/a/m/p/l/e/users/profile/index.phpが生成されます。私の本当の疑問は、これは安全ですか?これは私がユーザーの入力を害虫駆除しようとするものです。もしあればもっと教えてください。セキュリティとPHP

strip_tags(html_entity_decode($mysqli->real_escape_string($title)), ALLOWED_TAGS); 
ALLOWED_TAGS = "<br><p><b><i><hr>"; 

私はこのウェブサイトの開発に比較的新しいですので、これは良いアプローチであれば、それは何度も何度も同じ情報を取得するためにデータベースを使用して歪みを脱ぐので、私は、疑問に思ってだけではなく、持っています静的なページに情報がある、またはこれは巨大なセキュリティホールですか?私は知らない! :)彼らは私がここにセットアップしたもので何らかのXSS攻撃をすることができるかどうかわかりません。助けてください!



マイケル

P.S.あなたは何か答えや提案があれば、なぜそれが私にいくつかの洞察力を与えてくれますか?私はコンピュータサイエンスの学位を持っているので、速く汚れた解決策だけでなく、それがどのように機能するのか不思議です。ありがとう。

+0

クラップ、ALLOWED_TAGSは= BR、P、B、I、時間です。私はちょうど私が実際のタグを入れることができなかったことに気付いた:) – Michael

+2

より良い方法は、後で検索/編集のために、これをデータベースに保存し、いつでもプロファイル情報が更新され、こうすることで、静的なページを取得し、緊張を解消し、htmlページから解析することなく、コアデータを後から変更できるようになります。 –

+2

あなたのファイルシステムには、各ユーザのためのものを作成しないでください。他の世界のようにデータベースに入れてください。あまり頻繁にページを再生成することを心配している場合は、Webサーバーの前にキャッシュを投げてください。 –

答えて

1

このXSS入力検証はひどいです。 html_entity_decode()は必要なものの反対です。 <p>タグのようなこれらのタグのいくつかは、event handlerでJavaScriptを実行できるようにします。つまり、このコードはxssを止めるためのものではありません。

htmlspecialchars($var,ENT_QUOTES);またはhtmlpuriferを使用してください。あなたがhtmlpuriferのルートに行くならば、それは最新のものを保つことを確認してください、それはregexの何千も使用するので、それは非常に計算的に高価なoahとhtmlpurifer、

2

これは私の会社の社内ナレッジベース用にコンパイルしたPHPセキュリティチェックリストです。それが助けになるかもしれない。

  • 廃止予定の関数を使用して
  • SQLクエリの変数値を使用する場合は、常にユーザーの入力
  • 使用プレースホルダを検証し実践しないでください。
  • SQLクエリで常に使用される変数をエスケープします。
  • 適切なディレクトリアクセス許可を設定する
  • ユーザーが毎回ログインするときに常にセッションIDを再生成する。 (セッションIDハイジャックを避けるため)
  • パスワードをプレーンテキストで保存しないでください。ハッシュ値のみを格納します。
  • Webページにユーザー入力を出力するときは、常にhtmlの特殊文字を確認してください。 (XSS攻撃にはHTMLタグが使用される可能性があります)
  • デプロイメントサーバーを移動する前にその仕様を理解してください
  • ログエントリが保存されるディレクトリを保護します。
  • セットregister_globalsがオフ
  • PHPセーフモードが有用であり得ることではなく、コードで使用されていない、php.iniの
  • に設定disable_functionsを用いて機能システムとexecを無効にした場合、それがバージョン5.3
  • ため廃止され
  • プロダクション/ライブサーバでdisplay_errorsをoffに設定します。
  • 検証クッキーデータ
関連する問題