2013-02-15 24 views
5

ハッカー(またはスクリプトキディーズ)がウェブサイトのコードベースのリークを使用して私のウェブサイトを攻撃したと思います。このhtmlを含むようにデータベース内の投稿が変更されました:<meta http-equiv = "refresh">攻撃を防ぐ方法は?

<meta http-equiv="refresh" content="0;url=http://example.com"/> 

私は現在システムを書き直すことができません。将来このような状況が起こらないようにするための戦略は何ですか?

私は管理スクリプトを特定のドメインへのアクセスを許可するサブドメインに移行することを考えています。またはmod_security SecFilterScanPOSTを使用して、http-equivなどを含むすべての投稿要求をスキャンするか、自分のサーバーまたはすべての投稿要求のみを許可しますか?

ありがとうございます。

+2

ベストソリューション、あなたのデータをサニタイズ。また、サーバ自体が侵害された場合に備えて、すでに行ったことを防ぐよりも、問題のほうが深刻な場合に備えて、さらに調査したいこともあります。 –

+6

セキュリティは外部ラッパーではありません。コアアプリケーションにセキュリティホールがある場合は、それらの穴を固定してセキュリティホールを確保する必要があります。外にバンデードを貼り付けることではありません。 – deceze

+1

@decezeと同じくらい真実です、つまり現実の世界では必ずしもオプションではありません – Sprague

答えて

3

コードが注入されている場合の最初のステップは、あなたがルート句が何であるかを識別するのに役立つ可能性がある、調査することができる -

  1. あなたのウェブサイトには、データベースと注入されたタグからコンテンツを取得する場合は、検索されましたおそらくあなたのサイトにはSQLインジェクションの欠陥や他の脆弱性があり、攻撃者がそこでコンテンツを変更できるようになっている可能性があります。

  2. すべてのPHPファイルのタグは、攻撃者がファイルシステムにアクセスできることを意味します。彼はあなたのFTPやtelnetやその他の管理コンソールにアクセスすることができます。あるいは、あなたのWebサイトには、攻撃者がWebサイト上のファイルを変更/作成できる脆弱性があります。

  3. サーバーが攻撃者からのこのようなアクセスを許可する脆弱性を持つことも可能です。ここで

あなたが根本的な原因を特定した後、それに応じてそれを修正=)

いくつかの一般的なが再び起きてから同じことを防止することを助けるために助言されています

  1. は、あなたのウェブサイトやサーバーを確認コードレビュー、ペンテスト、またはいくつかの自動スキャンのいずれかを使用して、脆弱性を修正して修正します。速やかに更新、修正プログラム、セキュリティパッチをインストールし

  2. 。更新、更新、更新、更新されたままにしておいてください。

  3. ファイルシステムに対して適切なフォルダアクセス権(読み書き、読み取り専用、アクセス不可)を割り当て、ユーザーに必要な権限のみを付与します(最小特権原則) 。

    • たとえば、Webサーバーユーザーは、アップロードフォルダ以外のすべてのWebコンテンツフォルダでのみ閲覧できるようにすることができます。
    • 通常、設定ファイルはWebサーバーユーザーが書き込み可能である必要はありません。通常、管理者だけが書き込み可能です。また、そのようなファイルの内容がWebサーバーからアクセスできるように(つまり、Webサーバーのhttp:// URL経由で)許可されないように注意してください。それらをWebコンテンツのルートの外に直接置くことはいい考えです。
    • アップロードフォルダをWebコンテンツのルートディレクトリの外に置くこともいいアイデアです。
    • 所有者は、所有者が自由に許可を変更できるので、ファイル。
  4. サードパーティのコンポーネント(Wordpress/Joomlaプラグインなど)を使用する場合は十分注意してください。サイト運営者を信頼する場合にのみ使用します。メインサイトからのみダウンロードしてください。彼らも最新の状態に保つことを忘れないでください。必要に応じて無効にして削除してください。

  5. FTP、Telnet、データベース管理コンソール(phpMyAdminなど)などの管理コンソールやサービスへのアクセスを制限してください。

    • パスワード(特に管理者)が使用されている場合は、実際にはクリアテキストプロトコルを使用しないようにする必要があります。送信されます。通常、それらのための暗号化された選択肢があります。 Telnet - > SSH、FTP - > SFTP/FTP、HTTP/HTTPS。
    • データベースポートは、インターネットからアクセスできるようにする必要があります。あなたがこれを必要とするのはまれな状況です。ほとんどの場合、ループバックインタフェースをリッスンするように設定...
+0

データベースへのHTMLの挿入はSQLインジェクションと何が関係していますか?準備したステートメントを完全に保存してこれを行うこともできます。 –

+0

@circleこの長くて便利な答えをありがとう。私はそれを保ち、私の将来の子供にそれを与える:) 私はセキュリティがチェックリストの問題だと思う。パイロットのように、人間の記憶に頼らずにすべてをチェックする必要があります。 – fatihpense

+0

@FrancoisBourgeoisはいプリペアドステートメントは、SQLインジェクションの有効な手段です。そして、データベースがページコンテンツの生成に関与している場合、SQLインジェクションだけではHTMLコンテンツをページに挿入する唯一の方法ではありません。また、これを達成するために格納されたXSSなどを使用することも可能です。ワームが多くのCMSで既知のSQLiを使用することは非常に一般的であったからです。Joomla)悪意のあるページヘッダを挿入します。 – circle

1

これは、データベースからの読み取り中にデータをエスケープしたくない場合(これはすべきである)、怠惰な解決策です。

function escape_deep(&$value) 
{ 
$value = htmlspecialchars($value); 
} 

array_walk_recursive($_GET, 'escape_deep'); 
array_walk_recursive($_POST, 'escape_deep'); 
+0

私はdbから読んでいる間私のデータをエスケープしたので、 )答えをありがとう。 – fatihpense

2

XSSinput validationの両方にOWASPを参照してください。

あなたの入力を浄化しないでください - あなたのデータベースに元の<meta http-equiv="refresh" content="0;url=http://example.com"/>が必要ですが、その代わりにそれを信頼できないデータとして扱い、出力の際にエスケープ/解除します。

+0

あなたの入力を浄化しないでください...待って、何? –

+0

@ジャック:はい:http://anuary.com/55/why-input-sanitization-is-evil –

+0

@FrancoisBourgeoisありがとう.. – fatihpense

関連する問題