לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 21-07-2008, 01:32
  Ronibla Ronibla אינו מחובר  
 
חבר מתאריך: 13.12.06
הודעות: 254
בניית מערכת מידע עם אופציית ניהול - קווים לדמותה.

איזו כותרת מפוצצת הבאתי, אה?
טוב, אז להסביר במילים פשוטות מה אני רוצה:

בניתי אתר למדריך טיולים, ושמתי את כל הטיולים במסד נתונים (אני רוצה שיהיה אפשרות למיין אותם עפ"י סדר מסוים, וגם שהוא יוכל להוסיף טיולים שהוא רוצה. פרטים מיד. אם יש דרך טובה יותר לעשות זאת - אשמח לשמוע).
עכשיו אני רוצה לבנות דף ניהול, כדי שהבחור שבשבילו אני בונה את האתר - יעני, המדריך - יוכל להוסיף טיולים משלו בצורה פשוטה למסד.
בשביל זה בניתי דף login.asp ששם מתבקש המשתמש להכניס סיסמה לתיבת טקסט. הדף בודק אם הסיסמה נכונה (הסיסמה נקבעת שרירותית מראש), ואם כן - מעביר את המשתמש לדף הוספת הנתונים. ישנה גם אופציה להוסיף קוקיס למשתמש, כך שבפעם הבאה - לא יצטרך לעבור בכלל בדף הLogin.

בדף הוספת הנתונים, Inset.asp לצורך המקרה, בודק השרת קודם כל אם יש לו את הקוקיז הנכון. אם כן, הבחור מורשה להוסיף נתונים לטבלה ע"י משפט Insert של SQL.

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

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

תודה מראש.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 21-07-2008, 01:48
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
בתגובה להודעה מספר 1 שנכתבה על ידי Ronibla שמתחילה ב "בניית מערכת מידע עם אופציית ניהול - קווים לדמותה."

לעניות דעתי בנית את התהליך בסדר גמור.

אני אישית לא אוהב שבכל קובץ חדש מוסיפים אליו קוד שבכל מקרה צריך להיות בו ובכל הקבצים הקשורים אליו.
כלומר - צור קובץ ראשי שדרכו תבצע require לקבצים האחרים בהתאם למידע שאתה מקבל במתודות GET ו-POST.
בקובץ הראשי הזה תבצע את הולידציה של המשתמש ואת כל הדברים שאתה צריך לבצע לכל הקבצים של דפי הניהול.

אני מקוה שאתה מסנן תוים לא רצוים, כמו תוי HTML שהמדריך עלול להכניס בתמימותו, ואז הוא עלול לשנות את מבנה העמוד.
דבר נוסף, שאני מניח שאתה מבצע אך אומר בכל זאת - הברחת תווים כמו " (גרשיים) ו- ' (גרש) או \ (לוכסן אחורי) שיכולים לשנות שאילתות SQL (נקרא SQL Injections). המדריך שוב בתמימותו יכול להכניס תווים שיכולים לעוות את השאילתא שלך, שכנראה תגרום לתוצאה ממש לא רצויה, או שהשאילתא בכלל לא תפעל.

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

נערך לאחרונה ע"י DCD בתאריך 21-07-2008 בשעה 01:54.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 21-07-2008, 02:05
  Ronibla Ronibla אינו מחובר  
 
חבר מתאריך: 13.12.06
הודעות: 254
בתגובה להודעה מספר 2 שנכתבה על ידי DCD שמתחילה ב "לעניות דעתי בנית את התהליך..."

וואו! לא חשבתי שתהיה לי תגובה כ"כ מהר בשעה כזאת מאוחרת בלילה... תודה! מה קרה, נדודי שינה? או שמא אתה בכלל בחו"ל, ואז השעות שלך הן לא אותן שעות?

אניווי - לא כ"כ הבנתי את מה שכתבת שם עם ה require. אשמח אם תוכל להרחיב קצת את הקטע הזה. אני אישית מכיר את הפקודה Include ב ASP, אבל לא נראה לי שיש צורך שאני אשתמש בה, מאחר שמדובר סה"כ על מנהל אחד לאתר, ורק 2/3 דפים שנצרכים, כדי להוסיף את המשתנים לטבלה. אם אתה חושב אחרת - אשמח לשמוע על כך.

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

ואגב, בתור משו קטן ליעול הקוד - שמעתי שעדיף להשתמש ב ADO להוספת נתונים, מאשר במשפט Insert של SQL. שזה יותר נוח. זה נכון?

אני מתבייש להעלות את קוד המקור של הקבצים.. הוא כ"כ פרימטיבי... אבל עוד שניה אני מעלה בכל-זאת, ולו רק כדי שתוכלו ללמד אותי כיצד לשכלל אותו.

שוב תודה על התגובה המהירה והמקצועית!!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 21-07-2008, 11:35
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
בתגובה להודעה מספר 3 שנכתבה על ידי Ronibla שמתחילה ב "וואו! לא חשבתי שתהיה לי תגובה..."

נשארתי ער עד מאוחר

ציטוט:
אניווי - לא כ"כ הבנתי את מה שכתבת שם עם ה require. אשמח אם תוכל להרחיב קצת את הקטע הזה. אני אישית מכיר את הפקודה Include ב ASP, אבל לא נראה לי שיש צורך שאני אשתמש בה, מאחר שמדובר סה"כ על מנהל אחד לאתר, ורק 2/3 דפים שנצרכים, כדי להוסיף את המשתנים לטבלה. אם אתה חושב אחרת - אשמח לשמוע על כך.


require זו פקודה ב-PHP שדומה מאוד ל-include. כרגע מבחינתך, שתי הפקודות שוות.

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

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


תחפש בגוגל על SQL Injections (או בעיברית: הזרקות SQL)

הנה כמה קישורים:
http://www.php.net/manual/en/securi...l-injection.php - תוכל להבין, למרות שזה שייך ל-PHP
http://en.wikipedia.org/wiki/SQL_injection

אולי תוכל למצוא עוד כאן:
http://www.addedbytes.com
http://shiflett.org
http://www.xaprb.com/blog

אסביר לך את הרעיון הכללי ולמעשה שמסכם את הכל:

נניח יש לך שאילתא:
קוד:
'SELECT true FROM members WHERE member_name="'+Request("name")+'" AND password="'+Request("password")+'"'

קצת שכחתי את התחביר של ASP, אבל החלק הבא:
קוד:
Request("password")

מתייחס לסיסמא שהמשתמש שלך בטופס ההתחברות שלו. (כנ"ל לגבי ה-member name)

לכאורה השאילתא נראית בטוחה. אבל מה קורה כאשר המשתמש כותב שהשם שלו הוא:
קוד:
myName" OR 1=1 --

???

אם המשתמש יכתוב שזהו שמו, אז השאילתא תחזיר true בקלות, כיוון שאז היא תיראה כך:
ציטוט:
'SELECT true FROM members WHERE member_name="myName" OR 1=1 --" AND password="stam_password"'


המחרוזת הבאה - "--" (פעמיים התו של מקף) ב-SQL נחשבת כהערה של שורה אחת. כלומר שכל מה שבא אחרי "--" נחשב הערה.
ולכן במקרה הנ"ל השאילתא היא למעשה:
קוד:
'SELECT true FROM members WHERE member_name="myName" OR 1=1


וכאן אפשר לראות בבירור שתנאי ה-WHERE אינו חשוב ואינו משפיע על תוצאות השאילתא.
במקרה זה יוחזרו כל החברים מרשימת ה-members, כולל האדמין עם ההרשאות הכי גבוהות של המערכת.

לכן זה נקרא "הזרקות SQL" - המשתמש יכול להכניס ("להזריק") מחרוזת שתיתפרש כחלק ממשפט ה-SQL עם פקודות של SQL.

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


גם אני שמעתי...

אף פעם לא ניסיתי להשתמש ב-ADO (או ב-PDO של PHP).
לפי מה שקראתי, הבנתי שזה עוזר משמעותית לייעול הקוד.
אבל קשה לי משום מה להאמין לזה...
האנשים שאמרו שזה ייעל את הקוד שלהם, בין היתר ביצעו גם פעולות אחרות בשביל ייעול הקוד (מלבד השימוש ב-PDO או ADO), ולכן הם לא בדקו ספציפית אם ה-ADO או PDO באמת משפר.

אשמח לחוות דעת נוספת בנושא.

בהצלחה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 23-07-2008, 17:57
  Ronibla Ronibla אינו מחובר  
 
חבר מתאריך: 13.12.06
הודעות: 254
בתגובה להודעה מספר 3 שנכתבה על ידי Ronibla שמתחילה ב "וואו! לא חשבתי שתהיה לי תגובה..."

והנה קוד המקור של דף הכנסת הנתונים (הסיסמא עוד תשתנה, אל דאגה...):



קוד:
<HTML> <HEAD> <TITLE>הכנס טיול</TITLE> </HEAD> <BODY> <% If Request.Cookie("password")<>"1234" And Request("password")<>"1234" Then Response.Write "Wrong Password" Else If Request ("Action") <> "שלח" Then %> <FORM METHOD=”post” ACTION=”<%= Request.ServerVariables(“PATH_INFO”)%>”> <P>כותרת הטיול: <BR> <INPUT TYPE=”text” NAME=”Title”> <P>אזור: <BR> <INPUT TYPE=”text” NAME=”Area”> <P>תאור: <BR> <TEXTAREA NAME=”Descr” ROWS=3 COLS=30> </TEXTAREA> <P><INPUT TYPE=”submit” NAME=”Action” VALUE=”שלח”> </FORM> <% Else Dim DBconn, rs Set DBconn = Server.CreateObject ("ADODB.Connection") DB.Mode = adModeReadWrite DBconn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Server.MapPath("db\trips.mdb") Dim RS Set RS = Server.CreateObject ("ADODB.Recordset") RS.Open "Trips", DBconn, adOpenStatic, adLockPessimistic RS.AddNew RS ("Title") = Request.Form("Title") RS ("Area") = Request.Form("Area") RS ("Descr") = Request.Form("Descr") RS.Update DBconn.Close Set DBconn = Nothing Response.Write "הטיול נוסף בהצלחה." End If End If%> </BODY> </HTML>


ואם מישהו יכול להסביר לי למה אני מקבל Error 500, יעני Server Error על שני הקבצים האלה שהעלתי - אני נורא נורא אשמח..

נערך לאחרונה ע"י Ronibla בתאריך 23-07-2008 בשעה 18:11.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 17:39

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר