פרצת אבטחה אווילית בתבנית קנויה

אודה על האמת. כשאני מגלה שתבניות קנויות הן מחורבנות אני לא יודע אם לזעוק או שאולי הם באמת חכמים יותר ממני ולא צריך למנוע בכל מחיר מסקריפטים ששמורים בדאטהבייס (והגיעו לשם איך שהוא) לרוץ בדפדפן.

לקוח שלי החליט להיות משווק שותף של אמאזון, הם סיפקו לו סקריפט, והוא שם את זה בתוך השדה post_content. ככה, פשוט. התבנית, מסתבר, לא משתמשת בפילטר the_content הישן והטוב שכולל בתוכו גם פילטר wp_kses עם הטאגים המותרים. במקום זה הם משתמשים בפונקציות לא ברורות כחלק מהפריימוורק הלא ברור שהם בנו, דבר שלא אומר לי כלום – שזו גם שערוריה בפני עצמה, אחד מהקודים הכי פחות קריאים שפגשתי:

$content= trim(themerex_gap_wrapper(themerex_reviews_wrapper($post_data['post_content'])));
echo $content;

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

global $allowedposttags;
$content = preg_replace( '/[\s\S]*?<\/script>/', '', $content );
$content = wp_kses( $content, $allowedposttags );

הערה מביכה: אם אתם מעתיקים את הקוד הזה נסו לבדוק ב-source של העמוד הנוכחי, כי כנראה שהמילה script מסוננת מטעמי אבטחה.

המלצתי ללקוח להעיף את כל הסקריפטים שהטמיע ולתת לי למצוא תבנית משותפת בכל הסקריפטים כדי לאפשר לו להטמיע במטא של הפוסט רק את ה-ID של המוצר ובנפרד להזין את הפרמטרים והטוקנים בעמוד באדמין, או הארד קודד.

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

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

ואז חששתי לרגע שאני דרמטי מדי.
ואז חששתי לרגע שאולי לא הייתי דרמטי מספיק.

בלינק: התבנית המחורבנת

טיפים ומאמרים XSS, themeforest, אבטחה

בחזרה למאמרים