IIS ReWrite モジュールが必要です。
管理者権限で、下記スクリプトを実行します。
スクリプトだけでは完結しないので、コメントも読んでください
# # PowerShell は BOM付き UTF-8 のエンコーディングで保存する事 # さもなくば、「文字列に終端記号" がありません」という # エラーに悩まされます。(BOMの仕様必要?) # # # X-ASPNET-VERSION を無効にする送信書き換えルールを # 指定された PSPath に追加する # function global:AddXASPNetVersionRule { param ( $PSPath ) echo "$PSPath の X-ASPNET-VERSION ヘッダを無効にします" $chk = Get-WebConfigurationProperty ` -Filter "//rewrite/outboundRules/rule[@name='REMOVE_X-ASPNET-VERSION']" ` -PSPath $PSPath ` -Name name if( $chk -eq $null ) { Add-WebConfigurationProperty ` -Filter "//rewrite/outboundRules" ` -PSPath $PSPath ` -Name "Collection" ` -Value @{name="REMOVE_X-ASPNET-VERSION"} Set-WebConfiguration ` -Filter "//rewrite/outboundRules/rule[@name='REMOVE_X-ASPNET-VERSION']/match" ` -PSPath $PSPath ` -Value @{serverVariable="RESPONSE_X-ASPNET-VERSION";pattern=".+"} Set-WebConfiguration ` -Filter "//rewrite/outboundRules/rule[@name='REMOVE_X-ASPNET-VERSION']/action" ` -PSPath $PSPath ` -Value @{type="Rewrite"} echo " ...処理完了..." } else { echo " ...処理済み skip..." } } # # SERVER-VERSION を無効にする送信書き換えルールを # 指定された PSPath に追加する # function global:AddServerVersionRule { param ( $PSPath ) echo "$PSPath の Server ヘッダを無効にします" $chk = Get-WebConfigurationProperty ` -Filter "//rewrite/outboundRules/rule[@name='REMOVE_SERVER-VERSION']" ` -PSPath $PSPath ` -Name name if( $chk -eq $null ) { Add-WebConfigurationProperty ` -Filter "//rewrite/outboundRules" ` -PSPath $PSPath ` -Name "Collection" ` -Value @{name="REMOVE_SERVER-VERSION"} Set-WebConfiguration ` -Filter "//rewrite/outboundRules/rule[@name='REMOVE_SERVER-VERSION']/match" ` -PSPath $PSPath ` -Value @{serverVariable="RESPONSE_SERVER";pattern=".+"} Set-WebConfiguration ` -Filter "//rewrite/outboundRules/rule[@name='REMOVE_SERVER-VERSION']/action" ` -PSPath $PSPath ` -Value @{type="Rewrite"} echo " ...処理完了..." } else { echo " ...処理済み skip..." } } # # サーバ変数 RESPONSE_X-ASPNET-VERSION を追加する # X-ASPNET-VERSION: ヘッダとして利用される変数 # $asv = Get-WebConfigurationProperty ` -filter "//rewrite/allowedServerVariables/add[@name='RESPONSE_X-ASPNET-VERSION']"` -name name if ($asv -eq $null) { echo "サーバ変数 RESPONSE_X-ASPNET-VERSION を追加します" Add-WebConfigurationProperty ` -Filter "//rewrite/allowedServerVariables" ` -PSPath "IIS:\" ` -Name "Collection" ` -Value @{name="RESPONSE_X-ASPNET-VERSION"} } # # サーバ変数 RESPONSE_SERVER を追加する # SERVER: ヘッダとして利用される変数 # $asv2 = Get-WebConfigurationProperty ` -filter "//rewrite/allowedServerVariables/add[@name='RESPONSE_SERVER']"` -name name if ($asv2 -eq $null) { echo "サーバ変数 RESPONSE_SERVER を追加します" Add-WebConfigurationProperty ` -Filter "//rewrite/allowedServerVariables" ` -PSPath "IIS:\" ` -Name "Collection" ` -Value @{name="RESPONSE_SERVER"} } # # X-ASPNET-VERSION ヘッダを無効にする # AddXASPNetVersionRule( "IIS:\" ) AddXASPNetVersionRule( "IIS:\sites\Default Web Site" ) # IIS-Admin上で手動追加するとエラーにならないが、コードで # 実行するとエラーになる不思議仕様 #AddXASPNetVersionRule( "IIS:\sites\Default Web Site\foo" ) # Application で無効化するために必要? # 仕様が不明すぎて草 AddXASPNetVersionRule( "MACHINE/WEBROOT/APPHOST" ) # # SERVER-VERSION ヘッダを無効にする # AddServerVersionRule( "IIS:\" ) AddServerVersionRule( "IIS:\sites\Default Web Site" ) # IIS-Admin上で手動追加するとエラーにならないが、コードで # 実行するとエラーになる不思議仕様 #AddServerVersionRule( "IIS:\sites\Default Web Site\foo" ) # Application で無効化するために必要? # 仕様が不明すぎて草 AddServerVersionRule( "MACHINE/WEBROOT/APPHOST" ) # # IISの Server Header を無効化します。 # 静的コンテンツだけに効果があるため気休め # echo " IIS のサーバヘッダを無効化します " echo " ※ Application に対しては効果がありません" Set-WebConfigurationProperty ` -pspath 'MACHINE/WEBROOT/APPHOST' ` -filter "system.webServer/security/requestFiltering" ` -name "removeServerHeader" ` -value "True" # # IISの TRACE を無効化します。 # 静的コンテンツだけに効果があるため気休め # echo " IIS のTRACE メソッドを無効化します " echo " ※ Application に対しては効果がありません" echo " コマンドで対応できる範囲は静的コンテンツのみです" echo " 要求フィルター>HTTP動詞>Trace;false をIIS設定から手動で行う必要があります" # # 要求フィルター HTTP動詞 TRACE をfalseにする # # エラーで動作しなくなるので、コマンドによる、このやり方はダメ # Add-WebConfigurationProperty ` # -pspath "IIS:\" ` # -filter "/system.webServer/security/requestFiltering/verbs" ` # -name '.' -value @{verb='TRACE';allowed='False'} # $colls = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' #echo "colls : $colls" $verbs = Get-IISConfigCollection -ConfigElement $colls -CollectionName 'verbs' #echo "verbs : $verbs" try { New-IISConfigCollectionElement -ConfigCollection $verbs -ConfigAttribute @{ 'verb'='TRACE';'allowed'=$false } Stop-IISCommitDelay } catch { # 取得して、値を設定するコードが動作しない。(関数の仕様がわからない) # echo " set trace " # $trace = Get-IISConfigCollectionElement -ConfigCollection $verbs -ConfigAttribute @{ 'verb'='TRACE' } # echo "trace : $trace.allowed $trace.verb" # Set-IISConfigAttributeValue -ConfigElement $trace -AttributeName 'allowed' -AttributeValue $false } # # Web設定を無効にしてもアプリケーションからのヘッダが無効になるとは言ってない # 気休め(無い方がまし) # #$rule3 = Get-WebConfigurationProperty ` # -filter "/system.webServer/httpProtocol/customHeaders/add[@name='X-Powerd-By']" ` # -Name name # #if ($rule2 -eq $null) #{ # echo "clear X-Powered-By" # Clear-WebConfiguration "/system.webServer/httpProtocol/customHeaders/add[@name='X-Powered-By']" #}
0 件のコメント:
コメントを投稿