sqlインジェクション攻撃:キーポイント
SQLインジェクション攻撃は、ウェブサイトのセキュリティ脅威です。攻撃者は、データベースを攻撃するために脆弱性を活用します。
SQLインジェクション攻撃を防ぐために、ユーザーの入力を信頼しないでください。潜在的な攻撃パターンがあるかどうかを常に確認してください。これには、テキスト入力だけでなく、非表示の入力、クエリ文字列パラメーター、Cookie、およびファイルアップロードも含まれます。
ユーザー入力は、サーバー側で検証して、そのタイプが正しいことを確認し、潜在的な悪意のあるコマンドを排除する必要があります。これは、SQLコマンドを変更する可能性のある入力にエスケープ文字を追加したり、SQLコマンドのユーザー入力をコマンドパラメーターに置き換える可能性のある入力に入力を追加するなど、さまざまな方法で達成できます。
潜在的な脆弱性についてウェブサイトコードを定期的に確認することが重要であり、SQLインジェクション攻撃の準備も重要です。潜在的な損害を制限するための手段には、管理者の権利の使用を避け、機密データの暗号化、絶対に必要な場合に備えて機密データを保存しないことが含まれます。
その他の保護対策には、読み取りおよび書き込みデータベース操作に個別の接続を使用し、特定のIPアドレスへのユーザーアカウントアクセスの制限、MS SQLサーバーのWindows認証モデルの使用、SHA-2パスワードハッシュなどの強力なアルゴリズムを使用します。
この記事をレビューしてくれたChris LienertとGuido Tonnaerに感謝します。
Webサイトに対するすべての攻撃の中で、SQL注入は最も危険で一般的なものであり、過去1年間に企業や組織に実際の損害を引き起こすために使用されています。このプログラムは、TalkTalk、VTech、The Wall Street Journal、米国政府など、有名な組織や企業を攻撃するために使用されています。
要するに、SQLインジェクション(SQLIとも呼ばれる)は、Webサイト入力チャネルの脆弱性を悪用して、最も敏感で価値のある情報を保存するWebアプリケーションバックエンドのデータベースを攻撃します。攻撃者は、このスキームを使用して、データを盗んだり改ざんしたり、アプリケーション機能を妨げたり、最悪の場合にデータベースサーバーへの管理アクセスを取得したりできます。ここに、SQLインジェクションとその攻撃からウェブサイトを保護する方法について知っておくべきことがあります。
sql噴射攻撃はどのように機能しますか
SQLインジェクション攻撃は、Webリクエストを介して悪意のあるSQLコマンドをデータベースサーバーに送信することにより実行されます。入力チャネルは、フォーム要素、クエリ文字列、Cookie、ファイルなどの悪意のあるコマンドを送信するために使用できます。それがどのように機能するかを理解するには、ユーザー名とパスワードを受け入れるログインフォームがあるとします:
ユーザーが資格情報を入力して「ログイン」ボタンを押すと、情報はWebサーバーに公開され、SQLコマンドと組み合わされます。たとえば、PHPでは、コードは次のようになります。
$sql_command = "select * from users where username = '" . $_POST['username']; $sql_command .= "' AND password = '" . $_POST['password'] . "'";コマンドはデータベースサーバーに送信され、生成されたデータセットは、ユーザー名とパスワードが有効なユーザーアカウントに対応するかどうかを判断します。ユーザー名としての平均ユーザー入力「John」、パスワードとしての「123456」は(ちなみに、そのパスワードを使用しないでください)次のコマンドに変換されます。
しかし、ユーザーが次のような他の何かを試すことを決定した場合:
SELECT * FROM users WHERE username='john' AND password='123456'
生成されたコマンドは次のようになり、常に空でないデータセットを返します:
このコードスニペットにより、ユーザーは正しい資格情報を持たずにログイン画面をバイパスできる場合があります。
SELECT * FROM users WHERE username='john' OR 1=1; -- ' AND password='123456'これは、SQL注入の最も簡単な形態の1つです。もう少しの労力で、同じユーザーが新しいユーザーアカウントを挿入したり、既存のユーザーアカウントを削除または変更できます。結果が表示されているページでは、同じスキームを使用して、元々は通常の訪問者による視界に限定されていたレコードや情報を表示したり、レコードの内容を変更したりすることができます。
より深刻な場合、攻撃者は、管理者アカウントを介してデータベースサーバーに接続すると、サーバーのオペレーティングシステムを完全に破壊することさえできます(MySQLの「ルート」やMS SQLサーバーの「SA」など)。 Windowsサーバーでは、XP_CMDSHELLなどの拡張ストアドプロシージャを実行する攻撃者として現れることがあります。あるケースでは、攻撃者はSQLインジェクションの脆弱性を悪用して、感染したサーバーでユーザーアカウントを作成し、リモートデスクトップ機能を有効にし、SMB共有フォルダーを設定し、マルウェアをアップロードします。実際、データベースに保存されているすべてを台無しにします。
ユーザー入力チャネルはSQLインジェクション攻撃の主要な媒体であるため、ほとんどの防御には、攻撃パターンのユーザー入力の制御と検閲が含まれます。
以下は、ユーザーの入力が安全であることを保証できるいくつかの測定値です。 ユーザーの入力を信用しないでください
ユーザー入力に関する主要なルールは「不信と検証」です。つまり、これが当てはまらないことが証明されていない限り、あらゆる形態のユーザー入力は悪意があると見なされるべきです。これは、テキスト領域やテキストボックスなどの単純な入力ボックスだけでなく、隠れ入力、文字列パラメーターのクエリ、Cookie、ファイルのアップロードなど、他のすべてのものでも機能します。
ブラウザのユーザーインターフェイスがユーザーが入力を操作できないからといって、改ざんできないという意味ではありません。 Burp Suiteなどのシンプルなツールにより、ユーザーはHTTP要求をキャプチャして、サーバーに送信する前に非表示のフォーム値を含むものを変更できます。 Base64を介してデータをエンコードするのに十分賢いと思われる場合、悪意のあるユーザーは簡単にデコード、変更、およびリコードできます。
サーバー側の入力文字列を確認します
検証とは、ユーザーが正しいタイプの入力を提供し、入力文字列に埋め込まれている可能性のある悪意のあるコマンドを排除することを確認するプロセスです。たとえば、PHPでは、mysql_real_escape_string()を使用して、SQLコマンドの性質を変更する可能性のある文字を逃れることができます。
上記のログインコードの変更されたバージョンは次のとおりです。
$sql_command = "select * from users where username = '" . $_POST['username']; $sql_command .= "' AND password = '" . $_POST['password'] . "'";この単純な変更により、悪意のあるユーザーが意図的に追加した単一の引用符の前にEscape Charales()を追加することにより、コードを攻撃から保護します。
検証に関する少しのメモ:クライアント検証関数を追加すると、素晴らしい仕事ができます。ただし、SQLインジェクション攻撃に対する防御として依存しないでください。クライアント関数は、サーバーへの悪意のある入力をより難しくする可能性がありますが、前述のブラウザの調整やツールを使用すると簡単に回避できます。そのため、サーバー側の検証で補完する必要があります。
いくつかのプログラミングプラットフォーム(ASP.NETなど)には、ページのポストバック時に悪意のあるコンテンツのユーザー入力を自動的に評価する組み込み機能が含まれています。しかし、ハッカーは十分なスキルと綿密さでそれらを回避できるため、独自のセキュリティチェッカーを介してユーザーの入力を実行する必要があります。あなたは決して慎重になることはありません。
コマンドパラメーターを使用
>を使用します
エスケープよりも優れた代替手段は、コマンドパラメーターを使用することです。コマンドパラメーターは、SQLコマンドにプレースホルダー名を追加することによって定義されます。これは、後でユーザー入力によって置き換えられます。 ASP.NETは、この目的のために非常に直感的で使いやすいAPIのセットを提供します。以下は、コマンドパラメーターを使用してWebサイトをSQLインジェクション攻撃から保護する方法を示すC#に記述されたコードです。
最初にSQLCommandオブジェクトを作成し、@Parameter_Nameパラダイムをコマンド文字列に使用します。この文字列には、ユーザー入力を挿入する必要があります。
SELECT * FROM users WHERE username='john' AND password='123456'
次に、コマンド文字列と直接連結するのではなく、SQLParameterオブジェクトのインスタンスを作成し、ユーザー入力を挿入します。
最後に、SQLParameterオブジェクトをSQLCommandオブジェクトのパラメーターコレクションに追加します。これにより、パラメーターを提供された入力に置き換えます。 ADO.NETは、残りの作業を担当しています。
PHPでは、同等のものは前処理ステートメントであり、ASP.NETのカウンターパートよりも複雑です。ここで探索できます。
入力の説明的変換このトリックは、PHPのような弱いタイプの言語で機能します。つまり、通常、変数のデータ型を定義しないことを意味し、言語は異なるデータ型の変換を互いに自動的に処理します。
説明変換は、非弦の型が関与しているときに入力を逃れるためのショートカットとして使用できます。したがって、ユーザーにAGEパラメーターのINTを入力する場合は、PHPで次のコードを使用して、入力が安全であることを確認できます。
このコードスニペットは、入力のタイプのみを検証し、その範囲ではないことに注意してください。したがって、ユーザーが負の年齢、または1300などの非現実的な年齢を入力しないことを確認するために、他のコードを実行する必要があります。
さらに、別のベストプラクティスは、非ストリング入力を含むSQLコマンドで単一の引用符を使用しないことです。したがって、次のコードを使用しないでください...$sql_command = "select * from users where username = '" . $_POST['username']; $sql_command .= "' AND password = '" . $_POST['password'] . "'";
…次のコードを使用する方が安全です。
SQL注射の犠牲者になったときの損傷を最小限に抑えるためのヒントをいくつか紹介します。 管理者の権限を避けます
「ルート」または「sa」アカウントを使用してWebアプリケーションをデータベースサーバーに接続することは、最も深刻な間違いの1つです。すでに述べたように、妥協した管理者アカウントは、ハッカーにシステム全体にアクセスできるようになります。 ADMIN以外のアカウントでさえ損傷を引き起こす可能性があります。これは、特にデータベースサーバーが異なるアプリケーションとデータベース間で共有されている場合、サーバー内のすべてのデータベースにアクセスできます。
したがって、ウェブサイトのバックエンドにある特定のデータベースに簡単な読み取りおよび書き込みアクセス許可を持つアカウントを使用する方が良いため、WebサイトがSQLインジェクションでハッキングされている場合、損傷の範囲はそれに限定されます。範囲内の単一のデータベース。より高度なアプローチは、データベースから読み取りまたは書き込み、各セグメントの権限と役割をさらに削減するコードセグメントに個別の接続を使用することです。たとえば、リストページ(データベースを変更するのではなく、検索パラメーターを使用して広く使用)をデータベースへの読み取り専用接続を使用してエンコードして、コードの障害抵抗をさらに強化できます。
MySQLでは、ユーザーアカウントへのアクセスを特定のIPアドレス範囲(「%」モデルではなく)に制限して、リモートの場所から損傷したアカウントへのアクセスを防ぐことにより、セキュリティが改善されます。
データベース内の機密データを暗号化します。これには、パスワード、セキュリティの質問と回答、財務データ、健康情報、および悪意のあるアクターに役立つ可能性のあるその他の情報が含まれます。これにより、ハッカーがデータを手元に持っていても、すぐにそれを活用できないことが保証され、脆弱性を発見し、脆弱性をプラグインし、強制的なパスワードリセットなどの他の反応を行う時間が与えられます。攻撃を受けている人は、解読の前にその価値を失います。 パスワードをハッシュしている場合は、SHA-2のような強力なアルゴリズムを使用してください。これはまもなくパスワード保護の業界標準になります。 MD5とSHA-1は時代遅れで、逆転することができます。 他の形式の暗号化については、キーを保存し、単一の賭けをしない場所に注意してください。キーが暗号化されたデータのすぐ隣にあり、ハッカーがサーバーが侵害されると簡単にアクセスできる場合、暗号化を使用することには意味がありません。
最終的な考え
SQLインジェクション攻撃からWebサイトを保護するFAQ
パラメーター化されたクエリは、値を表すためにプレースホルダーを使用し、実行時に値自体が提供されるSQLクエリの一種です。これは、攻撃者が悪意のあるSQLコードを挿入しようとしたとしても、SQLコマンドの一部ではなく、文字通りの文字列として扱われることを意味します。これにより、SQL注入攻撃が効果的に防止されます。 ストアドプロシージャは、データベースに保存されているSQLステートメントであり、アプリケーションで呼び出すことができます。データベースへの直接アクセスを許可しないため、SQLインジェクション攻撃の防止に役立ちます。代わりに、SQLコマンドとして実行されないパラメーターを使用するため、注入されたSQLコードが実行されないようにします。 正しいエラー処理は、データベース構造またはSQL構文に関する情報を明らかにしないことにより、SQLインジェクション攻撃を防ぐのに役立ちます。これは、エラーが発生すると、エラーメッセージが攻撃者にデータベース構造またはSQL構文に関する手がかりを提供し、攻撃を改善するために使用できるためです。 最小許可原則とは、意図した機能を実行するために必要なアクセス許可をユーザーアカウントまたはプロセスのみに提供することを意味します。たとえば、ユーザーアカウントがデータベースのデータのみを読み取る必要がある場合、書き込みアクセスを許可する必要はありません。これは、攻撃者が脆弱性を活用しようとするときにできることを制限することにより、SQL注入攻撃を防ぐのに役立ちます。
機密データを暗号化します
必要でない場合は、機密データを保存しないでください
SQLインジェクション攻撃からウェブサイトを保護する最初のステップは、SQLインジェクションとは何かを理解することです。 SQLインジェクションは、攻撃者が実行のために入力フィールドに悪意のあるSQLステートメントを挿入するために使用するコードインジェクション技術です。これにより、機密データ、データの損失、さらにはデータの破損への不正アクセスにつながる可能性があります。これを理解したら、入力検証、パラメーター化されたクエリ、ストアドプロシージャを使用してWebサイトを保護するなどの測定値を実装できます。
入力検証は、ユーザー入力の構文、コンテンツ、および論理値を定義する方法です。これを行うことにより、攻撃者が悪意のあるSQLコードをWebサイトの入力フィールドに挿入することを防ぐことができます。これは、入力検証プロセスが定義された基準を満たさない入力を拒否するためです。
パラメーター化されたクエリとは何ですか? SQL注射攻撃をどのように防止しますか?
ストアドプロシージャは、SQL注入攻撃の防止にどのように役立ちますか?
SQLインジェクション攻撃の防止においてエラー処理はどのような役割を果たしますか?
最小許可原則を使用して、SQLインジェクション攻撃からWebサイトを保護するにはどうすればよいですか?
SQLインジェクション攻撃の防止において、定期的な更新はどのような役割を果たしますか?
SQL注入攻撃を防ぐには、通常、既知の脆弱性のパッチが含まれているため、定期的な更新が重要です。ソフトウェアを最新の状態に保つことにより、SQLインジェクション攻撃によって悪用される可能性のある既知の脆弱性から保護されるようにすることができます。
Webアプリケーションファイアウォール(WAF)は、Webアプリケーションとインターネット間のHTTPトラフィックをフィルタリングおよび監視することにより、SQLインジェクション攻撃からWebサイトを保護するのに役立ちます。 HTTPリクエストで悪意のあるSQLコードを検出することにより、SQLインジェクション攻撃を識別およびブロックできます。
侵入検知システム(IDS)は、ネットワークトラフィックを監視し、疑わしい活動を検出することにより、SQL注入攻撃を防ぐのに役立ちます。 IDSが潜在的なSQLインジェクション攻撃を検出した場合、管理者に攻撃を防ぐための措置を講じるよう警告することができます。
暗号化は、攻撃者が機密データを読むことを難しくすることにより、SQLインジェクション攻撃からウェブサイトを保護するのに役立ちます。攻撃者がSQLインジェクションの脆弱性を悪用したとしても、それを使用するためにデータを復号化する必要があります。
以上がSQLインジェクション攻撃からウェブサイトを保護する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

AIの分野での中国の女性の技術力の台頭:Deepseekの女性の技術分野への貢献とのコラボレーションの背後にある物語は、ますます重要になっています。中国の科学技術省からのデータは、女性科学技術労働者の数が巨大であり、AIアルゴリズムの開発においてユニークな社会的価値感度を示していることを示しています。この記事では、携帯電話の名誉に焦点を当て、その背後にある女性チームの強さを探り、Deepseek Bigモデルに最初に接続し、技術の進歩を促進し、技術開発の価値座標系を再構築する方法を示します。 2024年2月8日、Honorは、Deepseek-R1 FullbloodバージョンのBig Modelを正式に立ち上げ、Android Campで最初のメーカーになり、Deepseekに接続し、ユーザーから熱狂的な反応を喚起しました。この成功の背後にある女性チームメンバーは、製品の決定、技術的なブレークスルー、ユーザーを行っています

DeepseekはZhihuに関する技術記事をリリースし、Deepseek-V3/R1推論システムを詳細に導入し、初めて主要な財務データを開示し、業界の注目を集めました。この記事は、システムの毎日のコストの利益率が545%に高いことを示しており、グローバルなAIビッグモデルの利益の新たな高値を設定しています。 Deepseekの低コスト戦略は、市場競争において有利になります。モデルトレーニングのコストは同様の製品の1%から5%であり、V3モデルトレーニングのコストはわずか5576百万米ドルであり、競合他社のコストよりもはるかに低くなっています。一方、R1のAPI価格設定は、Openaio3-Miniの1/7〜1/2です。これらのデータは、DeepSeekテクノロジールートの商業的実現可能性を証明し、AIモデルの効率的な収益性も確立します。

Mideaは、Deepseek Big Model -Midea Fresh and Clean Air Machine T6を装備した最初のエアコンをリリースします。このエアコンには、環境に応じて温度、湿度、風速などのパラメーターをインテリジェントに調整できる、高度な空気インテリジェントな駆動システムが装備されています。さらに重要なことは、DeepSeek Big Modelを統合し、400,000を超えるAI Voiceコマンドをサポートすることです。 Mideaの動きは、業界での激しい議論を引き起こし、特に白物と大規模なモデルを組み合わせることの重要性を懸念しています。従来のエアコンの単純な温度設定とは異なり、Midea Fresh and Clean Air Machine T6は、より複雑で曖昧な指示を理解し、家庭環境に従って湿度をインテリジェントに調整し、ユーザーエクスペリエンスを大幅に改善します。

ウェブサイトの構築は最初のステップに過ぎません:SEOとバックリンクの重要性 ウェブサイトを構築することは、それを貴重なマーケティング資産に変換するための最初のステップにすぎません。検索エンジンでのWebサイトの可視性を向上させ、潜在的な顧客を引き付けるために、SEO最適化を行う必要があります。バックリンクは、ウェブサイトのランキングを改善するための鍵であり、Googleや他の検索エンジンにWebサイトの権限と信頼性を示しています。 すべてのバックリンクが有益であるわけではありません:有害なリンクを特定して回避する すべてのバックリンクが有益であるわけではありません。有害なリンクはあなたのランキングに害を及ぼす可能性があります。優れた無料のバックリンクチェックツールは、ウェブサイトへのリンクのソースを監視し、有害なリンクを思い出させます。さらに、競合他社のリンク戦略を分析し、それらから学ぶこともできます。 無料のバックリンクチェックツール:SEOインテリジェンスオフィサー

DeepSeek-R1はBaidu LibraryとNetDiskを支援します。深い思考と行動の完璧な統合は、わずか1か月で多くのプラットフォームに迅速に統合されました。大胆な戦略的レイアウトにより、BaiduはDeepSeekをサードパーティモデルのパートナーとして統合し、それをそのエコシステムに統合します。これは、「ビッグモデル検索」の生態学的戦略の大きな進歩を示しています。 Baidu SearchとWenxin Intelligent Intelligent Platformは、DeepSeekおよびWenxin Bigモデルの深い検索関数に最初に接続し、ユーザーに無料のAI検索エクスペリエンスを提供します。同時に、「Baiduに行くときにあなたが知っている」という古典的なスローガンとBaiduアプリの新しいバージョンは、WenxinのBig ModelとDeepseekの機能も統合し、「AI検索」と「ワイドネットワーク情報の改良」を起動します。

コード生成のAIプロンプトエンジニアリング:開発者ガイド コード開発の風景は、大きな変化を遂げています。 大規模な言語モデル(LLMS)と迅速なエンジニアリングのマスタリングは、今後数年間で開発者にとって非常に重要です。 th

このGOベースのネットワーク脆弱性スキャナーは、潜在的なセキュリティの弱点を効率的に識別します。 Goの同時機能機能を速度で活用し、サービスの検出と脆弱性のマッチングが含まれます。その能力と倫理を探りましょう


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック









