Web アプリケーションを SQL インジェクション攻撃から保護するように CentOS システムを構成する方法
はじめに:
インターネットの発展に伴い、Web アプリケーションの使用はますます普及していますが、それによって次のような問題も発生します。 Web アプリケーションのセキュリティの問題。中でもSQLインジェクション攻撃は最も一般的な攻撃手法です。 Web アプリケーションを保護するには、CentOS システム上で一連の構成と最適化を実行する必要があります。この記事では、Web アプリケーションを SQL インジェクション攻撃から保護するために CentOS システムを構成する方法について説明します。
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
データベース サーバーの構成
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
パラメータ化されたクエリ ステートメントを使用する: 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)
結論:
上記の構成とコードの最適化により、Web アプリケーションを SQL インジェクション攻撃から効果的に保護できます。もちろん、これは保護対策の一部にすぎず、その他のセキュリティ問題にも注意を払い、システムをタイムリーに更新および保守する必要があります。さまざまなセキュリティ対策を組み合わせることで、Web アプリケーションとデータのセキュリティをより効果的に保護できます。
以上がWeb アプリケーションを SQL インジェクション攻撃から保護するために CentOS システムを構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。