צפיות
תשובות
Sql injection ..בעיה
הנה שאילתת התחברות שהרכבתי לפני זמן רב .
רק היום שמתי לב כי זה פרוץ וניתן ליישם את שיטת הSql injection.
אני לא מצליח ליישם את השיטה ה2 שהוסברה במאמר כאן באתר מול הקוד שלי .
היכן להציב את הReplace וכיצד למקם את המשתנה בו הצבתי את הreplace בתוך השאילתה.
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject("ADODB.Recordset")
objConn.Open strConn
objRs.Open "SELECT TOP 1 IDAuthor, AuthorNick, AuthorPassword, AuthorLevel FROM Author WHERE AuthorNick = '" &_
'" & AuthorNick & '" & "' AND AuthorPassword = '" &_
Request.Form("Password") &_
"'", objConn, 0, 1
If objRs.BOF And objRs.EOF Then
נתוני התחברות שגויים
Else
נתוני התחברות נכונים
End If
objRs.Close
objConn.Close
Set objConn = Nothing
Set objRs = Nothing
אני מקווה שאני מובן
תודה מראש ידידיי .
14 תשובות
….
יש לך משתנה בשם AuthorNick ועוד קריאה למשתנה מסויים דרך Request.Form
עליך להכניס את הערך שב – Request.Form לתוך משתנה נוסף.
על שני המשתנים אתה מבצע ריפלייסים כמוסבר במאמר. אחרי שהריפלייסים בוצעו אתה משרשר את המשתנים לתוך השאילתא שלך.
כך עשיתי וזה לא עובד :
ראשית, הכנסתי את הערכים לתוך משתנים
AuthorNick=Replace(Request.form("Nickname"),"'",""")AuthorPassword=Replace(Request("Password"),"'",""")
ולאחר מכן תיקנתי את השאילתא שלי
objRs.Open "SELECT TOP 1 IDAuthor, AuthorNick, AuthorPassword, AuthorLevel FROM Author WHERE AuthorNick = '" &_
"& AuthorNick &" & "' AND AuthorPassword = '" &_
"& AuthorPassword &" &_
"'", objConn, 0, 1
וזה עדיין לא עובד :/
2 טעויות שלי ..
1. בתגובה שהוספתי אין שבירת שורה בין הגדרת המשתנים (בחלק הקוד הראשון) .. זה לא כך אצלי , זה טעות הקלדה
2. כשאני מגדיר את AuthorPassword כריפלייס, בקוד הקודם שכחתי להוסיף אחרי הrequest את הנקודה ואז form .. תוקן . אך עדיין לא עובד
כנס למאמר
על פונקצית ה- ותדע כיצד להשתמש בפונקציה ומה צריך להחליף.
שאלה בנוגע לכפל נתונים
איך אני יכול למנוע הזנת נתון מסויים
שמחרוזתו כבר קיימת בשדה מסויים בטבלה שלי .
בסיס נתונים : Access .
דוגמא :
יש לי אפשרות הרשמה למועדון חברים באתר,
אני רוצה למנוע את האפשרות מאנשים להזין
לתוך שדה השם משתמש – שם משתמש קיים כבר שנרשם לפני כן .
במידה והוא יזין שם משתמש שכבר קיים, הפלט יחזיר שגיאה .
תודה
שאילתה
SQL = "SELECT username,password FROM users WHERE username='"&Request.Form("username")&"'"
rs.Open SQL,Conn,3,3
If rs.EOF Then
' המשתמש לא קיים
Else
' המשתמש כבר קיים
End If
rs.Close
אם ערך הלולאה נכון אז …
לבנות (במקום איפה שרשמת "משתמש לא קיים") את השאילתה שתוסיף לי את המשתמש למסד נתונים ?
אפשר גם כך
ברמת המסד לעשות שהעמודה תאופיין כ- unique ואז פשוט לעשות try…catch
או On error Resume Next על ההכנסה…
אם יוצאת שגיאה סימן שהמשתמש קיים (תבדוק את סוג השגיאה כמובן…) אם לא אז הכל סבבה…
אבל חכה עד שמישהו יאשר ישלול את הדרך הזו
או שתעשה בדיקה מה יותר מהיר…
אני אנסה את שניהם ..
אני מאמין שברמת המסד זה יהיה לי יותר מהיר ..
אבל אני אבדוק את שניהם
תודה רבה לשניכם
רק סימון העמודה כ-unique זה
ברמת המסד. השאר מתבצע ברמת הסקריפט בשרת.
שאלה חדשה (ספירת רשומות) …
כיצד אני יכול לספור את כמות הרשומות
שיש לי לפי "where" מסויים .
דוגמא : אם יש לי דף המכיל את כל הרשומות אשר הf_id שלהם הוא 10 (שדה אשר מכיל את הID של קטגורייה מסויימת בטבלה אחרת).
והשאילתה נראית כך (לצורך העניין) :
Select * FROM someTable Where id=10
מה שאני רוצה , זה לספור כמה רשומות יש ובהן המספר 10 מופיע בשדה הf_id .
כיצד זה אפשרי ?
תודה
תיקון קטן ..
בקוד שהצגתי :
select * from someTable where f_id=10
תשובה
SELECT COUNT(f_id) AS intCount FROM someTable WHERE f_id=10
rs("intCount")
התייעצות .
אני מעוניין בנתינת שירות חופשי של Counter לאתרים של גולשים שונים.
כמובן אני מתכנת בASP במסדי נתונים מסוג Access .
אשמח לקבלת עיצות וטיפים שימושיים מאיפה להתחיל ? באיזה צורה לבנות את הקאונטר ? האם לאפשר הורדה של הקובץ או הצגת הקאונטר באמצעות Iframe? ועוד טיפים שתוכלו לספק לי .
תודה מראש ידידיי .