Web テクノロジーの継続的な発展に伴い、セキュリティの問題はますます重要になってきており、その中で XSS 攻撃は非常に一般的です。攻撃者は Web サイトにコードを挿入して、ユーザーが Web サイトを閲覧する際に攻撃を加え、個人のプライバシーを漏洩したり、フィッシング詐欺を行ったりします。したがって、最新の Web 開発では、XSS 攻撃を防止することが基本要件となっています。
XSS 攻撃を防ぐには、Nginx サーバーの動作をガイドするいくつかのポリシーを作成する必要があります。これらのポリシーには、入力検査、出力検査、Cookie フィルタリングなどが含まれます。以下に例を挙げて説明する。
入力チェックとは、パラメータの種類が正しいかどうか、特殊文字のフィルタリングなど、ユーザーが入力したデータをチェックすることを指します。 Nginx の場合、Lua スクリプトと正規表現を組み合わせて入力チェックを実装できます。以下に例を示します。
location / { access_by_lua_block { local args = ngx.req.get_uri_args() for key, val in pairs(args) do if type(val) == "table" then for k,v in pairs(val) do if string.match(v, "%W") then ngx.exit(ngx.HTTP_FORBIDDEN) end end else if string.match(val, "%W") then ngx.exit(ngx.HTTP_FORBIDDEN) end end end } }
上記のコードでは、Lua スクリプトの GET メソッドを通じてユーザーから渡されたパラメーターを取得し、正規表現を使用してパラメーターに特殊文字が含まれているかどうかを判断します。特殊文字が存在する場合、403 エラー ページが返されます。
出力チェックとは、タグ、属性、JavaScript などが安全かどうかなど、バックエンド プログラムの出力内容をチェックすることを指します。 Nginx の場合、NGX_LUA モジュールの sub_filter ディレクティブを使用して出力チェックを実装できます。以下に例を示します。
location / { proxy_pass http://backend; sub_filter_types application/json; sub_filter 'bad-word' 'good-word'; sub_filter_last_modified on; sub_filter_once off; }
上記のコードでは、sub_filter ディレクティブを有効にして、バックエンド プログラムから返された JSON データをチェックします。バックエンド プログラムから返されたデータに「bad-word」が含まれている場合は、「good-word」に置き換えます。
Cookie フィルタリングとは、ユーザーが設定した Cookie をチェックしてセキュリティを確保することを指します。 Nginx の場合、Lua スクリプトを使用して Cookie フィルタリングを実装できます。以下は例です:
location / { access_by_lua_block { local h = ngx.req.get_headers() local ck = h.cookie if ck ~= nil then if string.match(ck, "%W") then ngx.exit(ngx.HTTP_FORBIDDEN) end end } }
上記のコードでは、Lua スクリプトを使用して HTTP リクエスト ヘッダーに設定された Cookie を取得し、正規表現を使用して Cookie に特殊文字が含まれているかどうかを判断します。特殊文字が存在する場合、403 エラー ページが返されます。
上記は、XSS 攻撃を防ぐための Nginx ポリシー作成の実践です。もちろん、実際のアプリケーションでは、HTTP ヘッダーのセキュリティ、SQL インジェクションに対する防御など、考慮すべき側面が他にもたくさんあります。したがって、開発プロセスでは、Web アプリケーションのセキュリティを向上させるために、実際の状況に基づいてターゲットを絞った構成を作成する必要があります。
以上がNginx ポリシー作成の実践: XSS 攻撃の防止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。