還記得我去年寫過的【個資保護、Google Hacking 與 robots.txt 的關係與設定技巧】文章嗎?在公司內部的測試環境設定 robots.txt 非常重要,因為你必須阻止 Google 與各家搜尋引擎來到你的測試網站大肆搜索,否則那些開發到一半的網站、那些可能含有不完整的資訊,全部都會揭露給無心人與有心人知道。不過,無論我提過幾次這點重要性,總是有人會「忘記」在部署網站時順手加上這個檔案,三不五時的亡羊補牢其實也蠻讓人頭疼的,今天我寫了一支 PowerShell 指令檔,就是要來徹底解決這個問題。
首先,我們測試機網站超多,再過沒多久網站就要上百個了,如果有幾個網站沒加上,也只是剛剛好而已,但只要一個網站出問題就很難看啦。不過,網站這麼多,一個一個手動加上 robots.txt 會不會太辛苦,難道要花錢請工讀生每天查看一次所有網站的根目錄嗎?這成本也太高了些!所以,能有個自動化的管理機制,能夠避免人為疏失,才是比較務實的做法,此時,就必須寫一點小程式來解決啦!
(備註: 文末有提供 3 個贊助方案,程式碼請放心 Copy 回家用,對你有幫助再贊助即可,別有心理壓力! )
這次,我寫了一支 PowerShell 指令檔,該指令檔雖然短短的,但有許多細節要注意,我們先來看看程式碼,再來看解說:
Import-Module WebAdministration
Get-Website | Where-Object {
$_.State -eq 'Started' -and $_.PhysicalPath -notlike "*%*"
} | ForEach-Object {
cd $_.PhysicalPath
if($?) {
echo 'User-agent: *' > robots.txt
echo 'Disallow: /' >> robots.txt
$txt = Get-Content 'robots.txt'
$txt | Out-File -Encoding Default 'robots.txt'
}
}
程式碼解說:
【特別注意】
請立刻檢查你家網站的 robots.txt 檔案,如果該檔案為 UTF-8 with BOM 編碼,將會因為 BOM 字元而讓該檔案失效,你會以為已經正確設定了,不過卻沒有任何作用,這點比需特別注意。尤其是習慣在 Visual Studio 中新增 文字檔案 (*.txt) 的開發人員,更應該特別注意這點。
之後,只要將上述程式設定好工作排程器,每天或每小時執行一次,該主機應該就算安全了!
註: 通常 Google Crawler 不會一天照訪你的網站好幾次,如果要控制 Google Crawler 的造訪頻率,可以利用 Google 的網站管理員工具進行設定。
不過,在 Windows 的工作排程器設定有些地方必須注意:
1. 由於使用 WebAdministration 模組裡的 Cmdlets 必須「以最高權限執行」,否則會導致權限不足而無法正確執行
2. 觸發程序部分可以設定多久執行一次
3. 動作部分,也必須設定正確才能執行,我們要透過 powershell.exe 來啟動這個 Script 檔,範例如下:
詳細內容如下:
§ 假設上述範例的指令檔位於 C:\Users\Administrator\Desktop\Inject_robots.txt_to_Sites.ps1
- 程式或指令碼:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- 新增引數:-Command .\Inject_robots.txt_to_Sites.ps1
- 開始位置:C:\Users\Administrator\Desktop
相關網址