ホームページ >データベース >mysql チュートリアル >SQL インジェクションを防ぐために、Node.js の SQL クエリに JavaScript 文字列を安全に挿入するにはどうすればよいですか?

SQL インジェクションを防ぐために、Node.js の SQL クエリに JavaScript 文字列を安全に挿入するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-01 07:52:12162ブラウズ

How Can I Safely Insert JavaScript Strings into SQL Queries in Node.js to Prevent SQL Injection?

NodeJS で SQL クエリ用の JavaScript 文字列を保護する

SQL データベース挿入のためにユーザー指定の文字列を NodeJS に渡すときは、SQL を防ぐことが重要ですインジェクションの脆弱性。ユーザー名のような単純なデータの場合は通常のテキスト処理で十分ですが、電子メール アドレスの場合は特別な注意が必要です。この記事では、JavaScript 文字列の SQL フレンドリー性を高めるソリューションについて説明します。

MySQL の mysql_real_escape_string() のエミュレーション

PHP 関数 mysql_real_escape_string() は、安全な SQL 挿入のために文字列をサニタイズします。ただし、NodeJS はネイティブで同等のものをネイティブには提供しません。これを解決するには、SQL クエリで問題となる文字をエスケープすることでその機能を模倣するカスタム関数を実装できます。

次のコードは、JavaScript 用のカスタム mysql_real_escape_string() 関数を提供します。

function mysql_real_escape_string(str) {
    return str.replace(/[\x08\x09\x1a\n\r"'\\%]/g, function(char) {
        switch (char) {
            case "":
                return "\0";
            case "\x08":
                return "\b";
            case "\x09":
                return "\t";
            case "\x1a":
                return "\z";
            case "\n":
                return "\n";
            case "\r":
                return "\r";
            case "\"":
            case "'":
            case "\":
            case "%":
                return "\"+char;
            default:
                return char;
        }
    });
}

この関数は、指定された文字をエスケープされた対応する文字に置き換え、文字列を SQL 挿入に対して安全にレンダリングします。さらに、エスケープ文字の範囲をタブ、バックスペース、および '%' を含めるように拡張し、LIKE クエリとの互換性を確保します。

文字セットの認識に関する注意

MySQL の mysql_real_escape_string () は文字セットを認識しますが、ここで提供されるカスタム関数は文字セットを考慮しません。ただし、広範な文字エスケープにより、ほとんどのシナリオで確実に動作します。

続きを読む

SQL インジェクション防止の詳細と議論については、OWASP Web サイトを参照してください。 .

以上がSQL インジェクションを防ぐために、Node.js の SQL クエリに JavaScript 文字列を安全に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。