Skip to main content

Posts

Showing posts from 2016

Advanced SQL - Common Table Expression (CTE)

רבים המתכנתים שמכירים את שפת SQL. רבים מהם אף חושבים שהם מכירים היטב את השפה. במאמר הזה אראה שיש בשפה הזו הרבה יותר ממה שרוב המתכנתים מכירים ושווה ללמוד עוד השפה.
SQL היא שפה הדומה לאנגלית שמאפשרת לבצע עיבוד מידע, מה שנקרא בשפת המתכנתים, ביצוע "שאילתות" על נתונים. יש גם חלקים נוספים בשפה, ביניהם חלק שמאפשר שמירה ועדכון נתונים בתוך בסיס הנתונים ועוד חלקים אחרים. מה שהכי חשוב להכיר בשפה הוא היכולת שלה לבצע "שאילתות".
כולם מכירים את השאילתות "הרגילות".
אבל בשפה יש אפשרות לבצע שאילתות רקורסיביות וזה דבר מאוד חזק ולא מוכר. שאילתות רקורסיביות מאפשרות למצוא מידע מתוך בסיס הנתונים שבלעדיהם היה צריך להביא את הנתונים עצמם לשרת עצמו ושם לבצע את החישובים (רק שזה יהיה בדר"כ יותר איטי). 
דוגמא לדברים שאפשר לעשות עם שאילתות רקורסיביות - להביא מידע מעץ של נתונים שנשמרים בטבלה מנורמלת שיש בה שלוש שדות: id, data, parent_id. שאילתא רקורסיבית יכולה לעבור מצומת מסויים למעלה, לכל האבות שלו (כל פעם עלייה אחת). עוד דוגמא היא לעבור על גרף של נתונים.
הכלי שמאפשר שאילתא רקורסיבית נ…

elasticsearch - מבוא חלק 3 - חיפוש

איך מבצעים חיפוש ב ElasticSearch - מבוא בסיסי
עד עכשיו הכנסנו מידע ל elasticsearch (בהמשך ייכתב ES בקיצור). הגיע הזמן שנחפש אותו ...
Types אבל לפני שמתחיל לחפש נתאר עוד מושג חשוב ב ES והוא type. המושג הזה מאפשר לחלק את המסמכים שמוכנסים ל ES לקבוצות שונות. כלומר, אפשר להגיד ל ES בזמן הכנסת מסמך שהוא בעל type מסויים.


לדוגמא: נבנה אינדקס עבור מסעדה ונאנדקס בו תאור של כל המנות תחת type שנקרא dish, נאנדקס מידע על המלצרים תחת type שנקרא waiters ונאנדקס מידע על ספקים תחת type שנקרא supplier.
זה מה שמאפשר לנו אח"כ לחפש מידע מסוג מסויים. נוח!
הכנסת מסמך עם ציון הסוג שלו:

דוגמא:

ובמקרה שרוצים לתת ל ES לקבוע בעצמו את מזהה המסמך:
נחזור לחיפוש לחיפוש יש שני API-ים שונים.. אחד פשוט ומהיר שמיועד בעיקר לאנשים שרוצים להריץ שאילתא. השני הוא מובנה ומיועד לתוכנית שפונה ל ES.  בשני המקרים צריך לציין איפה לחפש. זאת מציינים בשורת ה URL:
כדי לחפש באינדקס מסויים נרשום בשורת ה URL:
GET /indexName/_search
כדי לחפש בסוג מסויים באינדקס: GET /indexName/typeName/_search
כדי לחפש בכל האינקסים שמתחילים בתוים מסוי…

XSS התקפת

התקפת XSS על אפליקציות וובהתקפת XSS מנצלת את העובדה שאפלקציית ווב משתמשת ב HTML ו JavaScriptלרוץ על הדפדפן. 
בעזרת הטכניקה שתתואר בהמשך, התוקף מצליח להריץ קוד JavaScript שלו על הדפדפן של הנתקף.
ראשית, XSS הוא ראשי תיבות של Cross Site Scripting. במקומות מסויימים ההתקפה גם נקראית JavaScript injection.

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

ובדף אחר אפשר לראות את כל ההודעות:

elasticsearch for dummies (hebrew) - part 2 - the document

המסמךבחלק 1 של מבוא ל elasticsearchנאמר כי elasticsearch הוא database שיודע לשמור מסמכים ולחפש בהם בצורה מאוד מהירה.
אז מה זה מסמך?כאשר שומעים את המילה "מסמך" (document) ישר קופץ לראש מסמך וורד או מסמך PDF שיש בו הרבה טקסט ותמונות. לא מדובר פה בכזה מסמך.
מסמך ב elasticsearch הוא אוסף של שדות. כל שדה יכול להכיל מחרוזת או מספר. שדה יכול להכיל מערך של ערכים. שדה גם יכול להיות שדה "מורכב" כך שהוא בעצמו מכיל אוסף שדות. חשוב לזכור שבמקרה והשדה מחזיק מחרוזת זה לא אומר בהכרח שמדובר בטקסט פשוט. יכול להיות שהמחרוזת הזו היא בעצם תאור של תאריך או תאור של סכום כספי.
כל מידע שיש לנו אפשר בדר"כ לייצג במסמך כזה. פשוט מחלקים את המידע לשדות ובונים "מסמך" שהוא אוסף השדות.
הצורה השכיחה להציג מסמך כזה היא שימוש בפורמט json. דוגמא:



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