שגיאה 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.

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

יסודות בתכנות

backward compatibility ו forward compatibility

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

בינה מלאכותית

התקנה של Openclaw על רספברי פיי

איך מתקינים את הלהיט החדש בתחום על רספברי פיי? קל ופשוט ללא חומרה מיוחדת ועם הסבר מפורט.

פתרונות ומאמרים על פיתוח אינטרנט

לא פרצו לנו, רק דלף לנו – לקחים טכניים מפרשת אלקטור

פסק הדין בפרשת תביעת של הדיבה אלקטור הוא קריאת השכמה טכנולוגית ומשפטית: מההגדרה המשפטית ל"פריצה", דרך החשיבות הקריטית של פרוטוקול ביעור נתונים אמיתי, ועד למה שבאמת קורה כשמערכות אבטחה מסתמכות על לוגים חסרים.

יסודות בתכנות

Decoupling ו-Coupling בהנדסת תוכנה

הסבר על מושג מרכזי בהנדסת תוכנה ובכתיבת קוד שכדאי להכיר במיוחד כשמנחים LLM בכתיבת קוד.

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