2011-12-01 56 views
0

我正在尋找一種命令行解決方案,以在Linux服務器上以更安全的方式替換php文件中潛在的危險字符串。我想在所有託管網站進行替換,然後讓它作爲日常cronjob運行,以保證安全。 Bash或PHP將是完美的我猜,但如果這樣更有效,我可以與Python合作。 我能找到很多例子,但不能使其適應我的情況,這是在網站文件中替換多行一:bash?蟒蛇?

  • 掃描所有/ httpdocs資料/子目錄在/ home /虛擬主機/(站點名)/,但掃描在/ home /虛擬主機的所有文件將也是。

  • 確定是否有包含多行代碼的文件,即

$authsites = array ( 'flickr.com', 'picasa.com', 'blah.com', );

並且如果是與

$authsites = array(); 

替換它(SED?)和log其中它取代了它。

非常感謝,謝謝。

+0

Truthfull ÿ?如果這是一項cron工作,我會用您熟悉的任何語言編寫它。最終結果是一樣的。就我個人而言,我可能會避免awk - 它是一個強大的工具,但它基於分隔符,您的客戶端代碼可能並不總是匹配。你不想錯過任何東西。 –

回答

0

我用命令行的perl批量搜索和替換

perl -pi -e 's/FIND IT/REPLACE IT' /home/name/public_html/html/*.html 
+0

可這一發現它是我多行代碼: $ allowedSites =陣列( 'flickr.com', 'picasa.com', 'blogger.com', 'wordpress.com', 「IMG。 youtube.com', 'upload.wikimedia.org', ); ? (以及編輯刪除換行符,但是這超過了8行) – Denis

+0

是的,您可以使用| (或) – 2011-12-01 21:38:05

0

這個怎麼樣awk需要一行代碼。您可以使用它與findfor loop進行批量替換。

awk '/\$authsites/{sub(/\(.*\)/,"()");print;next}1' INPUTFILE 

測試:

[jaypal:~/Temp] cat file00 
$authsites = array ('flickr.com', 'picasa.com', 'blah.com',); 
$authsites = array ('flickr.com', 'aaaa.com', 'blah.com',); 
fefe 
efef 
$authsites = array ('flickr.com', 'picasa.com',); 

[jaypal:~/Temp] awk '/\$authsites/{sub(/\(.*\)/,"()");print;next}1' file00 
$authsites = array (); 
$authsites = array (); 
fefe 
efef 
$authsites = array (); 

一個for loop這樣可以工作(儘管可能有更好的方法)

你可以根據你的文件改名字

for i in $(find . -type f -name "file*" -exec grep -H "\$authsites" {} \;| cut -d":" -f1 | uniq); do awk '/\$authsites/{sub(/\(.*\)/,"()");print;next}1' $i > $i.new; done 
+0

不知道文件名可以是什麼,所以我必須全部搜索它們: -type f -name「*」? 「\ $ authsites」中的grep可以作爲我的多行代碼嗎? – Denis

+0

您可以執行'grep -HE「\ $ authsites | \ $ allowedSites | \ $ something」'來搜索不同的代碼行。 '-E'是擴展的正則表達式,'|'是'或'表示法。您還必須在'awk'腳本中添加相同的值。'awk'/ \ $ authsites | \ $ allowedSites | \ $ something /' –

+0

我仍然會寫下所有可能的字符串,併爲第一遍做一些試驗。如果一切看起來都正常(你可以做代碼比較),然後添加所有剩餘的替代品並運行它。當我們執行'$ i> $ i.new'時,您的原始代碼不會受到影響,因爲所有更改都會轉到新文件。這使您可以靈活地刪除所有'.new'文件並重新開始。 –