はサンプルクエリです:PDO :: PARAMを使わずにParamをbindするのは安全ですか?ここ
$sql = $db->prepare("INSERT INTO `accounts`
(`id`, `name`, `email`, `phoneNumber`, `country`, `city`, `addrLine1`, `company`, `zipCode`, `sha_pass_hash`, `ClientGroup`, `Newsletter`, `signedIN`) VALUES
(NULL, :name, :email, :phoneNumber, :country, :city, :addrLine1, :company, :zipCode, :sha_pass_hash, '1', '1', NOW())");
$sql->bindParam(':name',$name);
$sql->bindParam(':email',$email);
$sql->bindParam(':phoneNumber',$phoneNumber);
$sql->bindParam(':country',$country);
$sql->bindParam(':city',$city);
$sql->bindParam(':addrLine1',$addrLine1);
$sql->bindParam(':company',$company);
$sql->bindParam(':zipCode',$zipCode);
$sql->bindParam(':sha_pass_hash',$sha_pass_hash);
$sql->execute();
bindParamがPDO::PARAM_STR
とPDO::PARAM_INT
などのPDO::PARAM
が設定されていない使用されたときにあなたが見ることができるように。
私の質問は結局: PDO::PARAM
が設定されていない場合、このクエリはSQL Injectionsに対して妥当ですか?
データ型を指定する義務はありません。もし欲しかったらどうぞ。これはセキュリティーには影響を及ぼさず、ステートメントに供給される前に値がどのように変換されるかにのみ影響します。 – tadman
**警告**:独自のアクセス制御レイヤーを作成するのは簡単ではなく、間違った操作をする機会がたくさんあります。 [Laravel](http://laravel.com/)のような最新の[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)がある場合は、独自の認証システムを作成しないでください。強力な[認証システム](https://laravel.com/docs/5.4/authentication)が組み込まれています。絶対に[推奨セキュリティベストプラクティス](http://www.phptherightway.com/#security)に従ってください。** SHA1 **のような弱いハッシュでパスワードを保存しないでください。 – tadman
ありがとうございます。私の主な質問は、 'PDO :: PARAMが設定されていないときにSQLインジェクションに対してこのクエリーを実行できるのですか? 'です。 –