Temiz çıkan bir dosya taraması, temiz bir site demek değildir. Zerk edilmiş betikler içeriğin içinde rahatça yaşar: bir yazının gövdesinde, bir araç kutusunda, bir ayar satırında, bir tema seçeneğinde. Uygulamayı yeniden kurmak dosyaları değiştirir ve bunların her birini tam da bulunduğu yerde bırakır.
Onu arayın
SELECT * FROM wp_posts
WHERE post_content LIKE '%<script%'
OR post_content LIKE '%eval(%'
OR post_content LIKE '%base64_decode%'
LIMIT 50;
SELECT option_name, LEFT(option_value, 120) FROM wp_options
WHERE option_value LIKE '%<script%' LIMIT 50;
Aynı düşünce her şema için geçerlidir: ziyaretçilerin gördüğü metin sütunları, artı ayarlar tablosu. Asla böyle bir şey içermemesi gereken içerikte bir script etiketi aramak, çoğunu bulur.
Ya da doğrudan dökümün tamamında arayın
Tabloları tahmin etmekten hızlıdır, ve bilmediğiniz bir şemada da işe yarar.
mysqldump -u user -p dbname > /tmp/scan.sql
grep -n -E '<script|eval\(|base64_decode|document\.write' /tmp/scan.sql | head -40
shred -u /tmp/scan.sql
Temizleyin
- Önce veritabanının yedeğini alın — canlı içerik üzerinde UPDATE deyimleri çalıştırmak üzeresiniz.
- Bir satırı elle düzeltin — dizginin tam olarak ne olduğunu ve onu çıkarmanın geriye geçerli bir içerik bıraktığını doğrulayın.
- Sonra gerisini, kapsamı dar tutarak —
UPDATE wp_posts SET post_content = REPLACE(post_content, '<script src="//bad.example"></script>', '') WHERE post_content LIKE '%bad.example%'; - Sayıyı öncesi ve sonrasıyla karşılaştırın — SELECT'inizin bulduğundan daha çok satıra dokunan bir REPLACE, örüntünün fazla geniş olduğu anlamına gelir.
Sonra kapıyı kapatın
İçerik bir yerden zerk edilir: eski bir eklenti, çalınmış bir yönetici parolası, yazılabilir bir yükleme klasörü. Onu bulmadan satırları temizlemek, her şeyin günler içinde geri gelmesi demektir. Bkz. Ele geçirilmiş bir siteyi temizlemek.
