MySqlにストアドプロシージャがあり、ユーザからの入力があります。私はSQLインジェクションを避けたい。 MySqlにSQLインジェクションを防止する機能はありますか?私はグーグルではありますが、ほとんどのウェブサイトにMySqlのPHP mysql_real_escape_string
が表示されます。文字列変数をサニタイズするためのmysqlの組み込み関数
入力変数をストアドプロシージャレベルでサニタイズする必要があります。私は準備された文を使用しましたが、依然としてMySqlに任意の組み込み関数があり、指定された文字列をサニタイズします。
CREATE PROCEDURE `SP_Xyz`
(IN _abc varchar(40),
)
BEGIN
SET @abc = _abc;
// This might cause sql injection
SELECT * FROM tbl WHERE col1 = @abc;
// We must use prepares statements
// But is there any mysql builtin function to sanitize input
# Say SELECT * FROM tbl WHERE col1 = PREVENT_SQL_INJECTION(@abc);
# In PHP we usually do
# $name = mysql_real_escape_string($name);
# mysql_query("SELECT * FROM users WHERE name='{$name}'");
END
phpが関数を提供して以来、MySqlに似た関数があります。どんな助けでも大歓迎です。
私はあなたのアプリケーション層でこれを処理する必要があると思います。データベースレベルでクエリをエスケープすることについて聞いたことはありませんでしたが(確かに済んでいますが) –
@TimBiegeleisen、私は同意しますが、タスクやプロジェクトの要件は何ですか?私が見た多くの企業システムでは、DB管理者、プロダクトマネージャーなどが、1つまたは複数の環境でDB書き込みアクセスでデータベースコンテンツを汚しているApp Teamに疲れてしまったため、ストアドプロシージャの検証レイヤーがあります。これは、リレーショナル・インテグリティのデータベース・エンジン実施の背後にある理由でもあります。何をすべきか!=よく行われること。 –