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']"
#}