PHPとmySQLデータベースを使用してコードスニペットを格納できるWebサイトを構築しています。しかし、私は自分のデータベースにユーザーが入力したコードを安全に挿入する方法を理解できません。私は通常、使用する安全機能(trim
、stripslashes
など)で入力を変換することができません。なぜなら、コードはデータベースに入力されたとおりに表示できるからです。私はmy_real_escape_string()
を見ましたが、%
と_
をエスケープしていないことがわかりました。これはMySQLワイルドカードとして使用できます。それは脅威を引き起こすのでしょうか、それともmy_real_escape_string
を使うことができますか?あらかじめThanx。安全にmySQLデータベースにコードを挿入する方法
答えて
ワイルドカードは、SELECT
クエリで使用された場合にのみ有効になり、特定の機能を使用する場合にのみ有効になります。したがって、コードを挿入する場合は、効果がないのでmysql_real_escape_string()
を使用すると問題ありません。
パラメータバインディングを使用できるように、PHPs PDOを使用することをお勧めします。次の例では、the PHP manualからです:
PDOを使用して<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
パラメータ化された挿入文を使用します。実際には、選択と更新でもパラメータ化を使用してください。
これらは自動的に処理されます。
なぜ賛成投票ですか? –
私のdownvoteではありませんが、間違いなくOPの質問への答えではありません。さらに、使用するライブラリを説明していない –
:
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('INSERT INTO fruit(name, colour, calories) VALUES(?, ?);');
$sth->execute(Array($calories, $colour));
mysql_real_escape_string()
を使用して文字列値のための完全な保護を提供します。データに%
と_
が存在する可能性があるという事実は関連性がなく、セキュリティ上の脅威にはならない。 int型の値について
、あなたはどちらか、彼らが実際に数字であるかどうかを検証し、または引用符にそれらをラップする必要があります。引用符なし
$intValue = mysql_real_escape_string($_POST["intValue"]);
$query = mysql_query("INSERT INTO table SET intValue ='$intValue'");
// note the quotes
、mysql_real_escape_string()
は数値に無用です!
@Daniel A. Whiteがすでに述べたように、あなたが始めているのであれば、代わりにPDO libraryの使用を検討してください。これは古いmySQL関数よりも新しいものであり、適切に使用するとSQLインジェクションを不可能にするパラメータ化されたクエリを提供します。
これは私にとってはうまくいきました。[adscript]はコードスニペットです。
<textarea rows="6" cols="80"><input name="adscript" type="text/javascript" class="text-input textarea" id="adscript" value="<?php echo htmlentities($row['adscript']);?>" size="80" height="40" maxlength="1000"></textarea>
- 1. データベースにユーザー入力コードを安全に保存する方法
- 2. 安全にmysqlデータベースにAndroidを接続する方法
- 3. MySQLデータベースにPHPオブジェクトを保存する安全な方法は?
- 4. mysqlの入力データを安全にエスケープする方法
- 5. SQLalchemyを使用してMySQLデータベースに安全に接続する方法は?
- 6. Googleログイン時にデータベースに安全に挿入し、ユーザーのユーザー情報を追加する方法Api
- 7. mysqlデータベースにmysqlデータベースにデータを挿入するたびに
- 8. リストビューアイテムをmysqlデータベースに挿入
- 9. MySqlデータベースに配列を挿入する方法
- 10. mysqlデータベースにファイル名を挿入する方法
- 11. 複数の$ _POSTデータをmysqlデータベースに挿入する方法
- 12. PHP:ラジオボタンの値をMySqlデータベースに挿入する方法
- 13. PHPでmysqlデータベースにcsvデータを挿入する方法
- 14. ワードプレスWPエディタ、データベースにデータを挿入する(安全な方法)iはワードプレスフロントエンドのフォームを有する
- 15. ノードをデータベースに直接挿入することは安全ですか?
- 16. MySQLデータベースにNaN値を挿入する
- 17. CクライアントをMySQLデータベースに挿入する
- 18. mySQLデータベースにHTMLデータを挿入する
- 19. フォームデータをmysqlデータベースに挿入する
- 20. MySQLデータベースに画像を挿入する
- 21. セッションデータをデータベースに挿入する方法
- 22. MySqlデータベースの挿入時に
- 23. iphone ..にSQLiteデータベースを安全に保存する方法は?
- 24. リッチテキストエディタのコードをデータベースに挿入する
- 25. データベースにスレッドで安全に読み書きする方法は?
- 26. スレッドSQL CEデータベースに安全にアクセスする方法
- 27. ユーザーが入力したC#コードを安全にする方法は?
- 28. データベースのクレジットカード情報を安全に暗号化する方法
- 29. MongoDBデータベースを安全にロックダウンする方法は?
- 30. laravel 5.2に挿入する前にIDをデータベースに挿入する方法は?
['addcslashes'](http://php.net/addcslashes)は、通常のエスケープや、LIKE式のプレースホルダをマスクするためのパラメータのバインディングによく使用されます。 – mario
トリム/ストライプスラッシュは安全機能ではありません。固定長テキスト/文字列フィールドでデータが失われるのを心配している場合を除き、余分なスペースはSQLでは心配することはありません。 stripslashesは、magic_quotesが土地の王だったPHPの初期の時代から残っているごみの馬鹿げた頭脳の断片です。 –
previous StackOverFlow質問にお答えできる質問:http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php http://stackoverflow.com/questions/4461759/parameterized -queries –