私は学習PHP自分のために意識し、strip_tags()機能です。このセキュリティ強化の?
-
20-09-2019 - |
質問
んでいきたいと思いるPHPは、私は以下のチュートリアルはこちらリンク
で見る方によっては怖いと感じるユーザーで書くのphpコードを入力と基本的にはネジのサイト。
それでいてはちょっとした病気、もう少し学習センのバットのよう具合に虚心坦懐にしばしているのか教えてください習慣でした。
以来、私のブランドの新しいPHPかげで日前勉強できると思ったからでく簡単になってかなりの混乱をきたしている。
どうしたいので防止のた理を主に取り上げ、その犯罪心理も可能です。D
解決
PHPアプリケーションを開発する際に心に留めておくべきいくつかのものがありますが、strip_tags()
はのみの1に役立ちます。実はstrip_tags()
は、有効ではあるが、でも必要以上のことを行うことがありますhtmlspecialchars()
と、おそらく危険な文字を変換しても、状況に応じて、preferrableでなければなりません。
の一般的に、すべてが2つの簡単なルールにダウンしています:すべての出力をエスケープし、すべての入力をフィルタするの今、あなたは正確に入力と出力を構成しているかを理解する必要があります。
出力は簡単ですが、アプリケーションがブラウザに送信するすべてはあなたが出力データを自分で書いていない出力され、そうhtmlspecialchars()
またはその他のエスケープ処理機能ごとに使用します。
入力はなく、あなたのPHPコードにハードコードされたデータであり、あなたのニーズに。データベースからでもデータは、潜在的に危険と見なされるべきです。データベースが別の場所でもあなたのアプリに影響を与える可能性がある方法で侵害された場合には、特に共有サーバー上であなたが知っていることはありません。
ホワイトリストようにのみ選択された値、expcted入力フォーマットに基づいて検証とを可能にする:データをフィルタリングするための異なる方法があります。私が提案したことがないことの一つは、ユーザーから取得したデータを修正しようとしている:あなたは、あなたが期待するものを取得していない場合、彼らはあなたのルールでプレイする必要があり、代わりにそれをクリーンアップしようとしているの要求を拒否
特別な注意は、データベースを扱う場合には、SQLインジェクションに支払わなければならない:攻撃のようなものは、あなたが適切にクエリ文字列を構築していないに依存している攻撃者が悪質な命令を実行しようとしてそれらを偽造することができますようにあなたは、データベースに送信。あなたはいつも mysqliのでプリペアドステートメントを使用して、このようmysql_real_escape_string()
や、より良いとしてエスケープ機能を使用する必要があります延長するまたは使用して PDOするます。
があり、このトピックに言ってより多くのだが、これらのポイントは、あなたが始める必要があります。
HTH
編集:明確にする、「フィルタリング入力」で、私はどのような方法で入力データを変更するには、どのような良いことだと何悪いのではない決定を意味します。私はそれがブラウザに出力しますしない限り、私は、ユーザーデータを変更することがありませんでし言ったように。
他のヒント
strip_tagsそれはすべてのケースで保護していない、実際に使用するのに最適なものではありません。
HTMLの精製します: http://htmlpurifier.org/する
しかし、それ自体は、まだすべてのユースケースに応じるませんが、入ってくるデータを処理するための本当の良いオプションです - 。しかし、それは間違いなく良い出発点です。
と言うのもあるのでしょうけど、 チュートリアル または誤解を招くセキュリティ:
が重要であることには注意したいの直接の$_GET&$_POST値です。常時送信、その価値をローカルな変数,&をご用意してお待ちしています。あと安全保障に関わる価値観ときに直接アクセス(又は 出力)$_GET&$_POST.
これはナンセンスです。コピーの値をローカルな変数には安全上の$_GETや$_POST変数。
実際にある本質的に安全てデータです。問題なのは んで.が完全に正当な理由が$_POST変数を含む ; rm -rf /
.このために出力するHTMLページまたは保存データベースです。
の時間で安全でない場合ご利用コマンドのように system
または exec
.ことになるのに必要なものも安心で何の変数だけます。この場合、うまく使いたいようなものwhitelist、少なくとも自分の価値を escapeshellarg
.
同様に発送お問合せデータベースに、送信HTMLをブラウザです。のデータを直前に送信すelseを使用し、適切な脱出の方法。
strip_tagsは、HTMLのすべての部分を削除します。より洗練されたソリューションは、ホワイトリストに基づいている(すなわち、特定のHTMLタグを許可します)。良いホワイトリストライブラリはhtmlpurifyer http://htmlpurifier.org/する
であります、物事のデータベース側のコースの使用mysql_real_escape_stringのかpg_escape_stringのような関数
まあ、おそらく私が間違っているんだけど、...すべての文献では、私が読んだ、人々はそれがhtmlspellcharsを使用するより良いだと言う。
また、入力されたデータをキャストすることはなく、必要に応じて。 (例えばint型のために、あなたはそれがユーザーIDだと確信している場合)。
まあ、事前に、あなたがデータベースを使用して起動しますとき - mysql_real_escape_stringの代わりに(それはまだmysql_escape_stringを書かれているいくつかの古い本で)SQLインジェクションを防ぐためにmysql_escape_string使用
。