sql >> データベース >  >> RDS >> Mysql

PerlのDBIを使用してSQLインジェクション攻撃から保護するにはどうすればよいですか?

    データベースに挿入するためにデータをサニタイズする適切な方法は、プレースホルダー を使用することです。 SQL文字列に挿入されるすべての変数。言い換えれば、これは絶対に行わないでください:

    my $sql = "INSERT INTO foo (bar, baz) VALUES ( $bar, $baz )";
    

    代わりに、?を使用してください プレースホルダー:

    my $sql = "INSERT INTO foo (bar, baz) VALUES ( ?, ? )";
    

    次に、クエリを実行するときに置換する変数を渡します。

    my $sth = $dbh->prepare( $sql );
    $sth->execute( $bar, $baz );
    

    これらの操作をいくつかのDBIコンビニエンスメソッドと組み合わせることができます。上記も書くことができます:

    $dbh->do( $sql, undef, $bar, $baz );
    

    DBIドキュメント をご覧ください 詳細については。



    1. 今日の(深夜以降の)タイムスタンプのみを選択します

    2. MySQL 1つの行の一意性に基づいてDISTINCTの複数の列を選択しますか?

    3. MySQLのデフォルトの制約名は何ですか?

    4. MySQLXMLクエリ