الموقع المستولى عليه لا يُشوَّه عادةً. فالتشويه نادر لأنه ينهي الوصول؛ والشائع هو صفحات مزعجة، وتحويلاتٌ لا تنطلق إلّا لزائرٍ قادم من محرّك بحث، وبريدٌ يُرسَل من خادمك. أمّا أنت، مسجَّل الدخول وتكتب العنوان مباشرةً، فيبدو لك كل شيء سليمًا.

الإشارات

  • نتائج بحثٍ عن نطاقك لم تكتبها أنت.
  • وبريدٌ من خادمك يرتدّ بكمّيات لا تفسّرها.
  • وقفزةٌ في المعالج أو في الصادر بلا قفزة في الزوّار.
  • وزائرٌ يبلّغ عن تحويلٍ لا تستطيع إعادة إنتاجه.
  • أو مضيفك أو متصفّحٌ يحذّر من الموقع.

أربعة أوامر

# 1. files changed in the last week, ignoring the ones that should change
find /var/www/site -type f -mtime -7 -not -path '*/storage/*' -not -path '*/cache/*' | head -50

# 2. PHP where PHP has no business being
find /var/www/site/uploads /var/www/site/public/img -name '*.php*' 2>/dev/null

# 3. the shapes an injected shell takes
grep -rEl 'eval\(|base64_decode\(|gzinflate\(|assert\(\$' /var/www/site --include='*.php' | head

# 4. logins that succeeded
sudo grep "Accepted" /var/log/auth.log | tail -20

قارن بشيء موثوق

إن كانت الشفرة في git فأسرع جوابٍ في الدنيا هو git status على الخادم: فكل معدَّلٍ أو غير متتبَّع لم تضعه أنت هو جوابك في سطر واحد. أمّا مع نظام إدارة محتوى، فأعِد تنزيل النسخة نفسها وقارن بها ملفّات النواة.

وقاعدة البيانات تُحسَب أيضًا

المحتوى المحقون يعيش غالبًا في قاعدة البيانات لا في الملفّات، ولهذا يُثبت مسحُ ملفّاتٍ نظيف أقلَّ ممّا يظنّ الناس — انظر برمجيّة خبيثة في قاعدة البيانات لا في الملفّات.

وإن وجدت شيئًا فلا تبدأ بالحذف. خذ نسخةً من الموقع كلّه ومن السجلّات أوّلًا: فهي السجلّ الوحيد لكيفية دخولهم، وبدونها تُغلق الملفّ وتترك الباب. ثم اتّبع تنظيف موقع مخترَق كما ينبغي.