ホームページ  >  記事  >  運用・保守  >  Web アプリケーションを SQL インジェクション攻撃から保護するために CentOS システムを構成する方法

Web アプリケーションを SQL インジェクション攻撃から保護するために CentOS システムを構成する方法

WBOY
WBOYオリジナル
2023-07-05 12:58:371728ブラウズ

Web アプリケーションを SQL インジェクション攻撃から保護するように CentOS システムを構成する方法

はじめに:
インターネットの発展に伴い、Web アプリケーションの使用はますます普及していますが、それによって次のような問題も発生します。 Web アプリケーションのセキュリティの問題。中でもSQLインジェクション攻撃は最も一般的な攻撃手法です。 Web アプリケーションを保護するには、CentOS システム上で一連の構成と最適化を実行する必要があります。この記事では、Web アプリケーションを SQL インジェクション攻撃から保護するために CentOS システムを構成する方法について説明します。

  1. Web サーバーのインストールと構成
    まず、Web アプリケーションをホストするための信頼できる Web サーバーをインストールして構成する必要があります。ここでは、例として一般的に使用される Apache サーバーを選択します。以下は、Apache サーバーを CentOS にインストールするコマンドの例です。

    sudo yum install httpd

    インストールが完了したら、Apache でいくつかのセキュリティ構成を実行する必要があります。まず、サーバー上のディレクトリの参照を無効にして、攻撃者がサーバー上の機密情報を取得できないようにします。以下は、httpd.conf ファイルを変更してディレクトリの参照を無効にする例です。

    sudo vi /etc/httpd/conf/httpd.conf

    ファイル内で次の行を見つけます。

    Options Indexes FollowSymLinks

    次のように変更します。

    Options -Indexes FollowSymLinks

    保存して保存します。ファイルを終了します。次に、Apache サーバーを再起動して、それを有効にします。

    sudo systemctl restart httpd
  2. データベース サーバーの構成
    Web アプリケーションでは、多くの場合、データの保存と管理にデータベースの使用が必要になります。ここでは、データを保存するデータベース サーバーとして MySQL を選択します。以下は、CentOS に MySQL サーバーをインストールするコマンドの例です。

    sudo yum install mysql-server

    インストールが完了したら、MySQL でいくつかのセキュリティ構成を実行する必要があります。まず、リモート アクセスを無効にし、データベースへのローカル アクセスのみを許可します。次に、my.cnf ファイルを変更してリモート アクセスを無効にする例を示します。

    sudo vi /etc/my.cnf

    次の行を見つけます。

    bind-address = 127.0.0.1

    この行の前にコメント記号「#」を追加して、コメント行:

    #bind-address = 127.0.0.1

    ファイルを保存して終了します。次に、構成を有効にするために MySQL サーバーを再起動します。

    sudo systemctl restart mysqld
  3. 安全な Web アプリケーション コードの作成
    Web アプリケーション コードを作成するときは、SQL インジェクション攻撃を防ぐためにいくつかのセキュリティ対策を講じる必要があります。 。以下は、いくつかの防御策のサンプル コードです。
  4. パラメータ化されたクエリ ステートメントを使用する: SQL クエリを実行するときは、文字列を連結する代わりにパラメータ化されたクエリ ステートメントを使用する必要があります。これにより、攻撃者が悪意のある入力を使用して追加の SQL コードを挿入するのを防ぎます。以下は、パラメーター化されたクエリ ステートメントの使用例です。

    import pymysql
    
    conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname')
    cursor = conn.cursor()
    
    sql = "SELECT * FROM users WHERE username = %s"
    username = 'admin'
    cursor.execute(sql, (username,))
    
    result = cursor.fetchall()
    
    for row in result:
     print(row)
    
    conn.close()
  • 入力のフィルターと検証: ユーザー入力を受信するときは、入力をフィルターして検証する必要があります。入力は予期された形式と型に準拠しています。入力フィルタリングと検証の例を次に示します:

    username = input("请输入用户名:")
    
    # 过滤非法字符
    for char in username:
      if char not in ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'):
          username = username.replace(char, '')
    
    # 验证用户名长度
    if len(username) > 20:
      username = username[:20]
    
    print("处理后的用户名为:", username)
  • 安全なデータベース ライブラリを使用する: データベース ライブラリを使用する場合は、pymysql や psycopg2 などの信頼できるライブラリを選択し、セキュリティの脆弱性を考慮して既知の既存のライブラリの使用を避ける必要があります。これらのライブラリには、通常、特殊文字の自動エスケープなど、いくつかの組み込みの防御手段が備わっています。

結論:
上記の構成とコードの最適化により、Web アプリケーションを SQL インジェクション攻撃から効果的に保護できます。もちろん、これは保護対策の一部にすぎず、その他のセキュリティ問題にも注意を払い、システムをタイムリーに更新および保守する必要があります。さまざまなセキュリティ対策を組み合わせることで、Web アプリケーションとデータのセキュリティをより効果的に保護できます。

以上がWeb アプリケーションを SQL インジェクション攻撃から保護するために CentOS システムを構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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