あなたができることの1つは、イントラネットにそれを隠すことです(もしあれば)。あなたのサイトのサーバーが、もう一方の端にあるエキゾチックな南アメリカの大学で謎の指によってスキャンされる頻度に驚かれるかもしれません。多分。
すべての入力が検証され、期待どおりであることを確認してください。filter_var()
別FILTER_
のsで頑張ってください。mysql_*
それ自体は悪ではなく、ただ古いものであり、セキュリティで*_real_escape_string()
はなく、クエリの整合性に関するものです。
私はこれを行うことが知られています:
switch ($_GET['color']) {
case 'green':
$color = 'green';
break;
case 'blue':
$color = 'blue';
break;
case 'yellow':
$color = 'yellow';
break;
default:
$color = NULL;
}
それは不自然ですが、あなたはドリフトを取得します。受け取ったデータに疑いの余地はなく、可能な場合はデータを使用してください。物事を単純に保ちますが、単純ではありません。クエリをPDOするような「ターンキー」アプローチが、サイトの資産(または仕事)を実際に保護するとは思わないでください。
フィールド名を検証する必要がある場合は、次のようなことをしているに違いありません。
$field = preg_replace('/[^a-z_]/', $_POST['field']);
非常識な正規表現に夢中になる...私はそれをシンプルで本当に簡単に保つようにしています。そうでなければ、かゆみを感じます。
PDOとMYSQLIは最新の優れたツールですが、セキュリティ上の懸念に代わるものでも、万能薬でもありません。コアセキュリティの原則と細部への細心の注意は、その仕事をどのように遂行するかです。たとえば、何かが「悪い考え」と見なされる理由がわからない場合は、それがわかるまで調べてください。eval()
、悪意のある人は、ナイフのように悪いことをする可能性があります。しかし、「取得」するのは簡単です。セッション固定、またはXRSF/CSRFハックを試してください。それは終わりのないオデッセイです。
(新しい)コードに精通し、調査を開始して継続し、あらゆる場所で厳密な検証を実装し、ユーザーランドから何も信頼せず、セキュリティの強化が終わることはないことを尊重します。
可能であれば、ベンダーに支払いをして、サイトを定期的にセキュリティスキャンします。毎月。Nessusの料金は年間1200ドルだと思います。それは絶対確実ではありませんが、まともな侵入テスターが20分で発見できるいくつかの不器用な低ぶら下がりの問題に悩まされるよりはましです。
右?
また、このコードで想像される問題に焦点を絞ったり、他の重大な懸念を無視したりしないでください。継承しているこのコードがPHP4.1を実行している場合、世界中に公開されている古いphpMyAdmin(psst、弱いパスワード)があり、サーバー管理が無視されるか、不適切に実行されると、問題が発生します。
あなたがそのようなサーバーを持っているなら、誰がSQLインジェクションの懸念を必要としますか。わからない場合はssh
トンネリングする必要があります。
ポートを保護し(閉じて監視することにより)、ソフトウェアパッケージのアップグレードを維持し、SUHOSINを使用し(更新されなくなりましたが)、リバースプロキシ(Varnish)やFail2banなどの他のツールを調べます。インフラストラクチャへの脅威を管理します。コードがそこにあることに依存していない限り、セーフモードや魔法の引用符のような「テクニック」に依存しないでください。
古いメンテナと話をしている場合は、彼が心配していることを聞いてください。私は8年間維持していたサイトをひっくり返しました。話をしましたlooong
...
- http://www.hardened-php.net/suhosin/(まだ維持されていますか?)
- http://sectools.org/
- http://h-online.com/security
- http://security.stackexchange.com
- http://www.schneier.com/