0

私が抱えている問題は、ユーザーに文字列を入力させることです... 156文字未満である可能性があり、文字列にアポストロフィまたは引用符がない場合、DBIステートメントは文字列を完全に挿入します。

これはうまくいきます->私は働いています!これは機能しません->私は機能していません!

挿入するには、次のコードを使用します。

    $sth = $dbh->prepare("INSERT INTO table VALUES('$var1','$var2','$var3')");
    $sth->execute();

Perlが''と""で異なる文字列を補間することは知っていますが、それを試してみると、私のプログラムはフィットをスローします。また、結合を使用して、「」マークを使用してその準備ステートメントを結合しようとしました。155文字を格納する変数は、重要な場合は$ var3であり、3つすべてがVARCHAR属性です。助言がありますか?

4

1 に答える 1

6

変数をエスケープする必要があります。

ハッカーが SQL インジェクション攻撃を実行するために悪用するのは、まさにこの見落としです。かわいそうな小さなBobby Tablesの話を読んでください。実際、準備されたステートメントをパラメーター化することにより、SQL の変数を評価すること絶対に避けてください。

$sth = $dbh->prepare('INSERT INTO table VALUES(?, ?, ?)');
$sth->execute($var1, $var2, $var3);
于 2012-10-14T23:01:31.007 に答える