תקלה זמנית חשפה בעיות עמוקות יותר באתר, והבנתי שאם אני רוצה לשמור עליו גם שנים קדימה, זה יחייב כמה שינויים מהותיים – בתשתית, בחומרים ובכלל. לעיונכם ולהצעותיכם, הנה פירוט של מה שאני מתכוון לעשות.
תקרית האבטחה – תקציר
לפני כמה ימים ניסיתי להיכנס לבלוג כדי לעבוד על פוסט מסוים, אך תוסף אבטחה של הדפדפן הקפיץ הודעה מדאיגה: בתרגום חופשי, סקריפט באתר נחסם עקב חשד ל-malware. התוסף סירב לגלות עוד פרטים על הבעיה. פניתי למספר אתרי אבטחה עם פונקציית סריקה אונליין, וכולם טענו שאין כלום. רק אחרי חיפושים רבים הצלחתי למצוא אתר (malcure.com) שכן איתר משהו – קטע JavaScript קצרצר שלא מצא חן בעיניו.
במסד הנתונים (MySQL) של הבלוג מצאתי וריאנטים של הסקריפט בלא פחות מ-1300 רשומות. חלקן היה פוסטים שפורסמו, ורובן גיבויים, גרסאות קודמות וכדומה. התחלתי למחוק את הסקריפט ידנית מהפוסטים הפופולריים ביותר – אלה שבדף הראשון כרגע, ועוד כמה שתמיד מגיעים אליהם מבחוץ (כמו דף טבלת ה-ASCII). במקביל התקנתי גם תוסף לניקוי מסד הנתונים, כדי להיפטר מהרשומות המיותרות.
תוך כדי כל זה, ניסיתי גם לגלות מה הסקריפט בעצם עושה. הוא היה ממש קצר, בנוי כך שיהיה קשה להבין אותו, אך בסופו של דבר ניתן לפענוח: הוא הופך אלמנט HTML ספציפי בדף לבלתי-נראה. זה הכול. איזה אלמנט? בכל פוסט, הסקריפט התייחס לאלמנט אחר – ID שונה ואקראי-למראה… שבכלל לא היה קיים בפוסט!
בסופו של דבר נתקלתי בפוסט אחד ישן, שכן כלל אלמנט עם ה-ID מסתורי. זו הייתה פסקת ספאם באנגלית שהוזרקה לפוסט, עם קישורים ל"בתי מרקחת אונליין". ראיתי פסקאות כאלה במתקפת ספאם שהתרחשה אצלי לפני יותר משנה: הן נטענות בשביל הבוטים של מנועי החיפוש והדירוג, אבל מוסתרות מייד מהעין כדי שמשתמשים אנושיים לא ישימו לב וידווחו עליהן. אז, כשזה קרה, איתרתי ומחקתי אותן, אך מסתבר שאחת או שתיים נשארו בפוסטים נידחים. הסקריפט הבעייתי ה"חדש" הוא בעצם שאריות מהמתקפה הקודמת, וכיוון שאז חיפשתי רק את מילות המפתח באנגלית, לא שמתי לב לשורת הקוד המחביאה, שהסתתרה במקום אחר בפוסט.
כשכל הניקויים והטיהורים הושלמו, ונרגעתי קצת כשהבנתי שלא הייתה סכנה ממשית לאף אחד, ניסיתי להבין מדוע בעצם צצה הודעת האזהרה בדפדפן. הרי הסקריפט הסתתר בפוסטים שלי, כאמור, במשך יותר משנה. בדיעבד, נראה שזה בכלל לא היה קשור אליו, אלא ל-Certificate פג-תוקף או משהו דומה שאינו בשליטתי (תודה לאלכס על הכיוון 🙂 ). התקלה הזמנית פשוט גרמה לי לבצע בדיקה מקיפה שהציפה את השיירים של המתקפה מפעם.
השלכות ומסקנות
כחלק מההתעסקות, יצא לי להסתכל שוב על פוסטים רבים מהעבר, על התכנים שבהם ועל סטטיסטיקת הכניסות אליהם. התמונה הייתה עגומה: יש 598 פוסטים (כולל זה), שלרובם הגדול אף אחד לא נכנס כבר שנים, ובצדק. הם התיישנו ולא רלוונטיים למייקרים בימינו. אני לא רוצה למחוק אותם, כי בכל זאת השקעתי בהם וזה חלק מההיסטוריה הפרטית שלי, אבל בפורמט ובמיקום הנוכחיים הם לא תורמים כלום ורק מהווים מצע להתקפות ספאם עתידיות, או גרוע מזה. אמנם יש לי גיבויים, אבל מה יקרה אם התקפה זדונית יותר תתחיל למחוק לי בסתר תכנים או לשבש אותם? יש גבול לכמה שאני מוכן להשקיע בניטור ותחזוקת בלוג פרטי שכזה.
ניקח לדוגמה את הפוסטים הטכניים שכתבתי על מיקרו-בקרי STM8S הקטנים והזולים שיכולנו לקנות פעם בסין. כבר אז הפוסטים האלה לא היו פופולריים, ובשנים שחלפו חברת ST החליטה להיפטר מסדרת השבבים הזו וכולם עברו לסטטוס NRND. מכל בחינה מעשית, הסיכוי שמישהו ייכנס לפוסטים הנ"ל כיום או בעתיד הוא אפס. מה אני עושה איתם?
הנה התוכנית:
- לאסוף פוסטים "מתים" לפי נושאים (למשל, "STM8S"), ולהעתיק את התוכן שלהם (כולל תגובות!), לפי סדר ההופעה המקורי, לקובץ אחד. אצלי יישמר קובץ מקור בפורמט של מעבד תמלילים, וממנו יופק קובץ PDF בטוח ואוניברסלי יותר, להעלאה לרשת.
- ליצור בבלוג שלי דף ארכיון, ובו קישורים לכל קובצי ה-PDF האלה, וכן הסבר קצרצר (בעיקר מילות מפתח) מה יש בכל אחד.
- למחוק את הפוסטים המקוריים, ולמקרה הבלתי-סביר שמישהו בכל זאת ינסה להגיע אליהם דרך קישור ישן, לשנות את דף 404 כך שיציע לחפש בארכיון.
- כשמספיק פוסטים כאלה יתנתקו מהפורמט הוויזואלי של הבלוג, אוכל לשנות סוף כל סוף את הפורמט עצמו – אולי לבחור ערכת נושא מודרנית, שתתאים טוב יותר לקהל היעד, לצפיה בסמארטפונים, ובכלל.
חוץ מזה, אני רוצה לשנות קצת את אופי הבלוג. כן, כבר אמרתי זאת בעבר: הפוסטים הטכניים (כמו שאני כותב בימים אלה על ה-CH32V003) לא שימושיים כמעט לאף אחד חוץ ממני, ולא מושכים מבקרים. כדי שתהיה לבלוג זכות קיום, אצטרך ליצור תכנים יותר פופולריים – אולי פרוייקטים, אולי משהו אחר, נראה…
מהניסיון שלי ברוב המקרים הבעיה נובעת משימוש בשירותי אחסון שיתופיים לוורדפרס. תנסה לחשוב על לעבור לאחסון פרטי (בין אם שירות מנוהל ובין אם בניהול מלא שלך). שווה לשמר את התוכן בפורמט הנוכחי כדי שיהיה יותר נגיש וניתן לחיפוש.
אני לא יודע איך בדיוק שירות האחסון פה עובד, זה לא התחום שלי – אבל הוא לא ייעודי להתקנות WordPress ודי בטוח שהוא לא שיתופי.
בכל אופן, אני אדגיש שוב: הכוונה היא לא לשים את כל התוכן הישן ב-PDF, אלא רק את אותם פוסטים שממילא יש בהם אפס תנועה במשך שנים. בשביל מה לשמור על הנגישות אם אף אחד לא ניגש אף פעם? וכמובן, התוכן לא ייעלם. אם כתבתי פעם על מיקרו-בקר XYZ ובמשך עשר שנים אף אחד לא ביקר בפוסט, אם מישהו יצטרך בכל זאת מידע עליו, הוא ימצא אותו כאן דרך מילות המפתח בארכיון.
כמעט בטוח שאתה יושב על מכונה משותפת ועל DB משותף, שווה לך לבדוק. אם זה המצב צפה לבעיות נוספות בעתיד בלי קשר למה שתעשה עם הפוסטים הישנים.
בדקתי והאחסון אכן משותף (shared). ה-DB של WordPress, עד כמה שאני מבין, הוא שלי בלבד (אני יכול לנהל ולערוך אותו ב-phpMyAdmin). לגבי מעבר ל-dedicated – הקהל של הבלוג קטן מאוד, נכון להיום הפרסומות לא מכסות את עלויות האחסון, ושרת פרטי מנוהל עולה פי עשרים בערך…
אני אומר, לא למחוק תוכן. אני אוהב לגלוש באתרים שאפשר לסמוך עליהם. שתוכן שקראתי לפני שנים רבות, עדיין יופיע כשארצה לקרוא אותו שוב. אני אפילו לא אזכור שהוא שם, אבל כשיקפוץ לי בתוצאות החיפוש אדע יפה להכנס אליו. אני מבין את החשש מדפים נטושים ומה שעלולים לגרום, אבל בוא. מדובר בקצת טקסט וכמה תמונות. לא משהו שקשה לגבות. אתרים מחזיקים תוכן מורכב יותר עשרות שנים בלי בעיה ובלי לשלם על זה יותר מדי. גם אם "תנעל" את זה בPDF או פטנטים אחרים, תמיד יכול להתגנב מישהו ולשנות משהו. פשוט תמצא פלטפורמה מוכרת ואמינה לבלוג, ותעלה לשם. זה גם יתן לך… לקרוא עוד »
מהפן הטכני, יכול להיות שקיימת שיטה פשוטה לגבות ולשחזר פוסטים בודדים במקום את כל ה-DB, אני לא מכיר כזו – בכל מקרה העלאה מחדש של PDF ששמור גם במחשב שלי תהיה עוד יותר קלה, והפוסטים יהיו קריאים גם מחוץ להתקנת WordPress, שזה בונוס לטווח הארוך מאוד. ב"פלטפורמה אמינה" התכוונת לצד הטכני או לשירות בלוגינג ("בלוג באתר X")? כי האופציה השנייה אפילו פחות אמינה, לדעתי. לגבי הפן ה"פסיכולוגי" – אני מבין אותך, זה היה מאוד מעיק כשהכתבות שלי בנענע10 התחילו לנדוד לקישורים חדשים ואחר כך נעלמו לגמרי. אבל כדוגמה נגדית, בוא ניקח פוסטים שלי כאן על סביבת הפיתוח Lazarus, שקיבלו בערך… לקרוא עוד »