הבוקר קילבתי מייל מגוגל לגבי Google Website Optimizer. עצם שליחת המייל הזה הינו דבר מפתיע מאוד, עד כדי כך שחשבתי שזהו ניסיון פישינג או מה לא… מסתבר שלא, עוד כמה אנשים קיבלו את זה, ובאינטרנט החלו צצות להן ידיעות על הדבר.
במייל גיליתי שישנה פרצת אבטחה בכלי המאפשרת לפורצי אתרים לנצל חולשה של סקריפט המוטמע באתר/עמוד הביקורת, מולו בודקים את הגרסאות השונות, כדי להריץ קודים או סקריפטים פוגעניים באתר שלי.
נראה כי גוגל תיקנו את הפרצה ב- 3 לדצמבר. מה שאומר שכל ניסוי חדש לא מכיל את הפרצה, אבל ניסויים שרצים שהחלו לפני תאריך זה, או ניסויים שעצורים כרגע, עדיין מכילים את הפרצה.
במייל, גוגל מסבירים כיצד ניתן לתקן את הקוד כדי לסגור את הפרצה. לא קשה במיוחד ולא צריך לעצור את הניסוי.
להלן הסבר כיצד לתקן את הפרצה
1. אתרו את סקריפט השליטה באתר שלכם. ככה הוא נראה עבור כל אחד מסוגי הניסויים:
הסקריפט של ניסוי A/B:
<!– Google Website Optimizer Control Script –>
<script>
function utmx_section(){}function utmx(){}
(function(){var k=’XXXXXXXXXX’,d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+’=’);if(i>-1){var j=c.indexOf(‘;’,i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f(‘__utmx’),xx=f(‘__utmxx’),h=l.hash;
d.write(‘<sc’+’ript src=”‘+
‘http’+(l.protocol==’https:’?’s://ssl’:’://www’)+’.google-analytics.com’
+’/siteopt.js?v=1&utmxkey=’+k+’&utmx=’+(x?x:”)+’&utmxx=’+(xx?xx:”)+’&utmxtime=’
+new Date().valueOf()+(h?’&utmxhash=’+escape(h.substr(1)):”)+
‘” type=”text/javascript” charset=”utf-8″></sc’+’ript>’)})();
</script><script>utmx(“url”,’A/B’);</script>
<!– End of Google Website Optimizer Control Script –>
הסקריפט של ניסוי Multivariate:
<!– Google Website Optimizer Control Script –>
<script>
function utmx_section(){}function utmx(){}
(function(){var k=’XXXXXXXXXX’,d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+’=’);if(i>-1){var j=c.indexOf(‘;’,i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f(‘__utmx’),xx=f(‘__utmxx’),h=l.hash;
d.write(‘<sc’+’ript src=”‘+
‘http’+(l.protocol==’https:’?’s://ssl’:’://www’)+’.google-analytics.com’
+’/siteopt.js?v=1&utmxkey=’+k+’&utmx=’+(x?x:”)+’&utmxx=’+(xx?xx:”)+’&utmxtime=’
+new Date().valueOf()+(h?’&utmxhash=’+escape(h.substr(1)):”)+
‘” type=”text/javascript” charset=”utf-8″></sc’+’ript>’)})();
</script>
<!– End of Google Website Optimizer Control Script –>
2. אתרו בכל אחד מהסקריפטים את השורה הבאה:
return c.substring(…
3. תקנו את השורה הזו באופן הבא:
לפני: return c.substring(i+n.length+1,j<0?c.length:j)
אחרי: return escape(c.substring(i+n.length+1,j<0?c.length:j))
אל תשכחו להוסיף בסוף הקוד החדש את הסוגר “(“.
4. החליפו את הסקריפט של כל אחד מהניסויים לסקריפטים הבאים:
הסקריפט המתוקן של ניסוי A/B:
<!– Google Website Optimizer Control Script –>
<script>
function utmx_section(){}function utmx(){} (function(){var k=’XXXXXXXXXX’,d=document,l=d.location,c=d.cookie;function f(n){ if(c){var i=c.indexOf(n+’=’);if(i>-1){var j=c.indexOf(‘;’,i);
return escape(c.substring(i+n.length+1,j<0?c.length:j))}}}
var x=f(‘__utmx’),xx=f(‘__utmxx’),h=l.hash; d.write(‘<sc’+’ript src=”‘+
‘http’+(l.protocol==’https:’?’s://ssl’:’://www’)+’.google-analytics.com’
+’/siteopt.js?v=1&utmxkey=’+k+’&utmx=’+(x?x:”)+’&utmxx=’+(xx?xx:”)+’&utmxtime=’
+new Date().valueOf()+(h?’&utmxhash=’+escape(h.substr(1)):”)+
‘” type=”text/javascript” charset=”utf-8″></sc’+’ript>’)})();
</script><script>utmx(“url”,’A/B’);
</script>
<!– End of Google Website Optimizer Control Script –>
הסקריפט המתוקן של ניסוי Multivariate:
<!– Google Website Optimizer Control Script –>
<script>
function utmx_section(){}function utmx(){}
(function(){var k=’XXXXXXXXXX’,d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+’=’);if(i>-1){var j=c.indexOf(‘;’,i);
return escape(c.substring(i+n.length+1,j<0?c.length:j))}}}
var x=f(‘__utmx’),xx=f(‘__utmxx’),h=l.hash; d.write(‘<sc’+’ript src=”‘+
‘http’+(l.protocol==’https:’?’s://ssl’:’://www’)+’.google-analytics.com’
+’/siteopt.js?v=1&utmxkey=’+k+’&utmx=’+(x?x:”)+’&utmxx=’+(xx?xx:”)+’&utmxtime=’
+new Date().valueOf()+(h?’&utmxhash=’+escape(h.substr(1)):”)+
‘” type=”text/javascript” charset=”utf-8″></sc’+’ript>’)})();
</script>
<!– End of Google Website Optimizer Control Script –>
שימו לב כי צריך למלא את המספרים שלכם באזור הזה בכל אחד מהסקריפטים המתוקנים: k=XXXXXXXXX
הניסוי שלכם ימשיך לעבוד כרגיל לאחר שתבצעו את העדכון, אין צורך לעשות עליו Pause או להתחילו מחדש (Restart).