完全なルートアクセス権を持つ専用サーバー (Ubuntu Server 8.10) で PHP 5 と MySQL 5 を実行しています。継承したいくつかの LAMP コードをクリーンアップしており、このタイプの構成で多数の SQL 選択を行っています。
SELECT ... FROM table WHERE
LCASE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
strSomeField, ' ', '-'), ',', ''), '/', '-'), '&', ''), '+', '')
) = $somevalue
そもそもデータベースがそのような選択を要求するように構築されるべきではないという事実を無視し、ギャップのあるセキュリティホールを塞ぐために $somevalue フィールドをパラメーター化する必要があります.WHERE条件を何かに修正するための私の最良のオプションは何ですか?攻撃性が低い?MSSQL や Oracle を使用していた場合は、単純にユーザー定義関数を作成しますが、MySQL の経験は限られているため、これまで UDF を構築したことはありませんでした。ただし、C のコーディングには満足しています。
更新:元のコードで既に眉をひそめている人のために説明すると、$somevalue は実際には $GET['product'] のようなもので、テーマにはいくつかのバリエーションがあります。この場合、select は、以前に URI パラメーターとして渡されたものと一致するように文字を削除した後、製品名でデータベースから製品を引き戻しています。