שגיאה 412 ו-mod_security

פיירוול אפליקטיבי שנמצא ב-Apache יכול לגרום לצרות צרורות - כך מאתרים ומטפלים בו

לא הרבה בקהילת בוני האתרים ואפילו מתכנתים מכירים את mod_security, מדובר בפיירוול אפליקטיבי שניתן להתקין על אפאצ'י כמודול (כמו mod_rewrite). מה שהמודול הזה מאפשר הוא חסימת טווח של כתובות IP, חסימה של התקפות XSS, הגנה מפני SQL Injections והגנה מפני ספאמרים. התקנת המודול די פשוטה, אך ההגדרה שלו היא קצת יותר בעייתית. כיוון שעל מנת להשתמש בו צריך להגדיר אותו כפרוקסי – על מנת שכל הבקשות מהעולם אל ה-Apache שלכם יעברו דרך mod_security. זה לא משהו מסובך ויש מדריכים לא רעים ברשת שמסבירים על mod_security ועל התקנתו.

אני לא משתמש ב-mod_securtiy כי ראשית כל אני משתמש בפיירוולים אחרים ובנוסף אני משתמש בפיירוול על מנת לספק שכבת הגנה נוספת ולא נסמך עליו על מנת לעצור התקפות XSS או התקפות SQL Injections. קודם כל על האפליקציה שלי להיות חסינה בפני עצמה (או לפחות להשתדל להיות חסינה) ורק אחרי שאני מעביר אותה בדיקה משל עצמי אני שם את הפיירוול.

מצד שני, יש לא מעט ספקי אחסון שמשתמשים ב-mod_security כדרך זולה ופשוטה לספק פיירוול אפליקטיבי לשרתים שלהם ושכבת הגנה נוספת. הבעיה היא שהפיירוול הזה לא מגן רק בפני כל מיני דרעקים כמו XSS או חסימת כתובות IP אלא גם לעיתים (תלוי בהגדרות) חוסם גם לפי מילים 'אסורות' כמו פוקר, הימורים ולפעמים גם דברים תמימים יחסית כמו sex או insurance. כאשר mod_rewrite חוסם את הבקשה הזו, הוא מחזיר שגיאת 412 קריפטית למדי: Error 412: precondition failed.

כאשר אתם מקבלים הודעה כזו, הכי קל זה לתקן את הבעיה בעצמכם או ללכת ולהתבכיין ל-Sysadmin שלכם שינטרל את המודול או שלפחות יבדוק את רשימת המילים האסורות. אבל במידה ויש לכם shared hosting זול, וה-sysadmin הוא איזה הודי אידיוט שיושב בכפר שלו עם קקי של פרות עד הצוואר, יש צורך בנקיטת פתרון אחר. למרבה המזל, ברוב המקרים אפשר לנטרל את mod_security באמצעות htaccess.

קודם כל, אני יוצא מנקודת הנחה ש-htaccess עובד אצלכם. אם הוא לא עובד – הנה מדריך שמסביר על htaccess ועל איך לפתור בו תקלות.

במידה והוא עובד, על מנת לנטרל את השגיאה הסוררת כל מה שעלינו לעשות הוא להכניס את השורה הזו ל-htaccess:


SecFilterEngine Off

כמובן שאז אתם לא מוגנים כלל (כביכול), אפשר לאפשר רק לקובץ הבעייתי פטור מהצנזורה של המודול באמצעות ציון שמו המלא ומתן 'הפטור'. בואו ונצא מנקודת הנחה שהקובץ שנותן לנו שגיאת 412 הוא img/poker.png :


SecFilterEngine On
SecFilterSelective "REQUEST_URI" "/img/poker.png" "allow,nolog"

וזהו, כך מאפשרים רק לתמונה או קובץ מסוים לעבור את הצנזורה הקשוחה של mod_security.

פוסטים נוספים שכדאי לקרוא

פיתוח ב-JavaScript

Axios interceptors

תכנון נכון של קריאות AJAX באפליקציה ריאקטית וניהול השגיאות או ההצלחות עם פיצ׳ר נחמד של axios

פייתון

קבצי קונפיגורציה בפואטרי

הגדרות שמשנות את ההתנהגות של פואטרי באמצעות קבצי הגדרות גלובליים, לוקליים ואפילו משתני סביבה.

עבודה בהיי טק

איך מראיינים סניורים?

השיטה שלי לבדיקת התאמה טכנית למתכנתות ולמתכנתים בכירים עם כמה שנות ניסיון.

גלילה לראש העמוד