このWebアプリは、さまざまな構成のシステムにインストールされ、(残念ながら)[マジッククォート]がオンになっているものとオフになっているものがあります。
別の回答へのコメントで述べたように、PHPマニュアルには、魔法の引用であるホラーへの対処に関するセクション全体があります。通常、.htaccessでローカルに無効にするか、入ってくるデータを修正することができます。私は個人的に、デフォルトで有効になっているホスティングプロバイダーとは取引しません。
addslashes()
以前は、データの入力がオフになるまで、ifステートメント全体を実行していました。
うわぁ! 十分な保護addslashes
ではありません。古いMySQL拡張機能を使用する場合は、文字セットを設定して から使用する必要があります。これを怠ると、大きな脆弱性にさらされる可能性があります。mysql_real_escape_string
...次のようなPDOクエリで実行する必要があること:
接続文字セットを設定する以外は何もありません!PDOは、可能な場合、実際に準備されたステートメントを使用します。これは、最初にプレースホルダーを含むクエリをサーバーに送信して処理できるようにし、その後、引数を個別に送信することを意味します。これにより、クエリはSQLインジェクションの影響を受けなくなります。
(一部のデータベースは、PDOを使用したプリペアドステートメントをサポートしていません。これらの場合、PDOはクエリを処理し、プレースホルダーを引用符で囲まれたエスケープされた値に置き換えます。結果は同じです。SQLインジェクションの影響を受けません。)
また、最終的にデータベースハンドラーを閉じる必要はありますか?そうしないことの不利益は何ですか?
他のPHPデータベースハンドラーと同様に、接続を閉じる必要はありません。スクリプトが終了すると、接続が閉じられます。(持続的接続についても考えないでください。)
PDOは、さまざまなサーバー設定にインストールされるCMSに適したオプションですか?PDOは、ほとんどのサーバーで有効になる場所で十分に普及していますか?
PDOはPHP5.1で標準になりましたが、それが常に利用可能であるとは限りません。ほとんどのLinuxディストリビューションは、PHPのすべてのデータベースアクセスオプションを分割しているため、それらをインストールすると必須ライブラリもインストールされます。時々、無能または経験の浅いホスティングプロバイダーは、他のデータベースアクセスオプションと一緒にPDOパッケージをインストールせず、彼らが何をしているかを理解していません。これは通常、PDOを有効にするように依頼し、望まない場合やできない場合は別のホストに切り替えることで修正されます。
最新のフレームワークの多くは、PDOの上に構築することを好みますが、他のオプションを利用できるようにします。たとえば、Zend FrameworkのZend_Dbには、PDO、mysqli、およびその他のいくつかのアダプターがあります。PDOが常に利用できるとは限らない場合は、アダプターレイヤーを使用するとうまくいく可能性があります。(ほとんどのZFコンポーネントと同様に、Zend_Dbは他のZFコンポーネントに大きく依存しないため、コードに簡単にバンドルできます。)