בנוגע לאבטחה

Zeliran

New member
בנוגע לאבטחה

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

Zeliran

New member
אם כן..

אם ההאקר מגיע לבסיס הנתונים, אז יש לו גם את ה salt... אז מה הטעם ב salt, הוא מיועד כדאי שאנשים לא יכניסו סיסמאות פשוטות מדיי?
 

asafeven

New member
נכון אבל אין לו את ה-hash

ואם יש לו את ה-hash אז אין לו את הערך הרנדומלי. בקיצור אלה 2 נתונים שהוא יצטרך במקום 1.
 

Zeliran

New member
../images/Emo3.gif

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

DiscoGamba

New member
tאם האקר "מגיע" לבסיס נתונים

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

Zeliran

New member
../images/Emo41.gifDataView

אני רוצה להציג רק את 5 הרשומות הראשונות נגיד.. בד"כ הייתי משתמש ב SELECT TOP 5 אבל איך ניתן לעשות זאת דרך ה DataView? ידוע לי על ה RowFilter אבל בו ניתן רק לרשום תנאי WHERE, או שלא?
 

gilad g

New member
קצת עקום, אבל יעבוד:

תוסיף עוד עמודה של מספר אוטומטי לטבלה שלך, וב-filter של ה-DataView תן לו "myCol <= 5"
 

Zeliran

New member
../images/Emo41.gifהמממ...

יש לי טבלת DataTable שלפני שאני מעדכן את בסיס הנתונים אני עובר על כל הרשומות ועושה משהו כזה:
dt.Rows.RemoveAt(e.Item.ItemIndex); for(int i=0;i<=dt.Rows.Count-1;i++) dt.Rows["id"] = i.ToString();

אבל כשאני מנסה לעדכן את בסיס הנתונים בעזרת DataAdapter.Update אני מקבל שגיאה שלא ניתן לעדכן את בסיס הנתונים בגלל שיגרם כפילות נתונים, כלומר.. ההודעה הזאת:
The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.​
אבל בעצם בטבלה שאיתה אני מנסה לעדכן את בסיס הנתונים, לא קיים כפילות נתונים..
 

ייוניי

New member
אתה עושה Update ל GetChanges?

הפעולה שאתה מנסה לעשות אפשרית רק כל עוד כל הפעולות יתבצעו ב DB באותו סדר שביצעת אותן על ה DT. שים לב שהשימוש ב RemoveAt אינו מומלץ, במקום יש להשתמש ב dt.Rows.Delete . רק כך אתה מבטיח שפקודת ה Delete תתבצע ב DB בשלב ה Update. ושים לב שאתה משתמש ב GetChanges על מנת לבצע את ה Update ורק לאחר שהוא מצליח מבצע AcceptChanges על ה DS.
 
למעלה