私はcodeigniterでCMSを作成しており、HTMLでラップされたテキストを保存する必要があります。私はデータベースからデータを取得し、それを私のページにエコーします。セキュリティを意識してこれを行う最善の方法は何ですか?データのデータベースをコードシニターに保存
例:
<h2>A fresh approach</h2>
<p>Whether you have queries regarding your</p>
<a href="#">cgoto page</a>
私はcodeigniterでCMSを作成しており、HTMLでラップされたテキストを保存する必要があります。私はデータベースからデータを取得し、それを私のページにエコーします。セキュリティを意識してこれを行う最善の方法は何ですか?データのデータベースをコードシニターに保存
例:
<h2>A fresh approach</h2>
<p>Whether you have queries regarding your</p>
<a href="#">cgoto page</a>
サニタイズは常に必要です。
あなたが保存して単にそのホワイトリストに含まれていないHTMLタグを一掃しようとしているデータを分析するように、私はHTMLタグのホワイトリストを使用して、特定のファンです。こうすれば、ユーザが予期しないまたはあいまいな振る舞いを持つ<script>
または<object>
などの特定のタグを挿入するのを防ぐことができます。
CMSユーザーの1人が非常にダムのパスワードを使用し、他のユーザー がアプリケーションに対してアクセス権を取得したとします。フィルタリングHTMLコンテンツが など悪質なクロスキーボードイベント(つまり ログインフォームで可能なパスワードを明らかにするかもしれない)を収集するためにはJavaScript ドメインおよび挿入から詐欺師を妨げる
また、それはあなたがしているHTMLを検証するために、常に良いことです無効なHTMLがウェブサイトのマークアップを傷つけたり、一部のブラウザでレンダリングを壊したりする可能性があるため、保存する予定です。コンテンツをエコーする前に@RodrigoFerreiraが言ったことを行うようにデータは、データベースに直接アクセスにより破損する可能性がありますので、データベースで物事を格納する前にチェックが十分ではないかもしれないことを行う
。
は(一度保存し、数回エコーますので、より良い)、または出力にし、ビューに渡された変数にコンテンツを割り当てる保存する前に、XSSフィルタを適用します。 $ this-> security-> xss_clean($ data_retrieved)を使うことができます。
真。しかし、攻撃者が既にデータベースに直接アクセスしている場合、出力上のコンテンツをフィルタリングすることは解決するための最小の問題になります。;)私は通常出力にhtmlentitiesフィルタを適用します(したがって、このケースでは)とxssフィルタをデータベースに保存する前に(同じデータを何度も繰り返しフィルタリングするのではなく、パフォーマンスの最適な方法) –
前と後のフィルタの方が最も安全ですが、彼は自分のニーズに合ったパフォーマンスバランスを見つける必要があります:]私は**直接のデータベースハッキングについては言及していません**、直接データベースによって引き起こされるデータベースの不一致を指していました(狂ったDBAが狂ったメンテナンススクリプトを実行している、それは笑い事です)。 – marcio