הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [עזרה]אבטחת אתר (https://hosts.co.il/forums/showthread.php?t=65040)

dabi 10-07-08 23:58

[עזרה]אבטחת אתר
 
שלום לכולם
אני בונה כרגע מערכת משתמשים ועליה ניהול תוכן
אבל כמובן שהבעיה היא פחות לבנות ויותר לאבטח
הבנתי שיש 2 סוגי בעיות עיקריות באבטחיה XSS
ו
SQL INJECTION

אשמח אם תפרטו לי על כל בעיה-ממה היא נוצרת ואם אפשר דוגמא לאיך אפשרי לפרוץ ככה אתר

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

mlnn 11-07-08 01:51

גוגל לא פועל היום?

kfir-d 11-07-08 08:46

mlinn אתה יודע מה מעצבן בתגובה שרשמת עכשיו?
אולי זה לא קשור לנושא אבל אני חייב להגיד את זה (גם אם התוצאה תהיה אזהרה או באן לכמה שעות)
ואני מאמין שיש עוד אנשים שחושבים כמוני
לפעמים שעושים חיפוש בגוגל על בעיות כאלה ואחרות מוצאים הרבה תוצאות מפורומים
ויצא לי להיתקל לא מעט בשאלה שרשמתי בגוגל ופורום הוסטס היה במקום הראשון עם אותה שאלה שחיפשתי
אתה יודע מה הייתה התגובה לשאלה של הגולש?
"גוגל לא פועל היום?" "חפש בגוגל" "כיום יש גוגל" ועוד...

מה גולש במקרה כזה יכול לעשות ?
אתם (הגולשים שכן יודעים) אמורים לעזור (זה המטרה של הפורום לא?) וככה להגדיל את המידע שיש באינטרנט

mlnn 11-07-08 10:30

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

kfir91 11-07-08 11:03

אתה עוטף כל get באתר קודם כל ב
htmlspecialchars כדי שזה ימנע שימוש בסקריפטים ב get שזה בעצם ההזרקות sql injection
וגם ב textarea אתה שם htmlspecialchars חפש את זה בגוגל תבדוק איך עושים את זה.
עוד טיפ ל get תעשה שליפה של ה ID הכי גבוה בטבלה שלך במסד ותעשה תנאי שאם ה ID שנכנס ל get יותר גבוה ממנו אז זה יציג דף שגוי ואם לא אז יציג את הדף שהוא צריך...
ככה זה ימנע הכנסת אותיות וכו' ל GET

קוד:

$id = htmlspecialchars($_GET['newsID']);

  $limitid = "SELECT MAX(ID) FROM news";
  $limitid2=mysql_query($limitid) or die("blah");
  $limitid3= mysql_result($limitid2, 0);

if ($id > $limitid3 || $id < 1)
{
echo "<br><br><div align='center'><img src='img/logo.jpg'><meta http-equiv=\"refresh\" content=\"1; url=$sl\" /> ";
exit();
}


Daniel 11-07-08 11:18

ציטוט:

נכתב במקור על ידי kfir91 (פרסם 649594)
אתה עוטף כל get באתר קודם כל ב
htmlspecialchars כדי שזה ימנע שימוש בסקריפטים ב get שזה בעצם ההזרקות sql injection
וגם ב textarea אתה שם htmlspecialchars חפש את זה בגוגל תבדוק איך עושים את זה.
עוד טיפ ל get תעשה שליפה של ה ID הכי גבוה בטבלה שלך במסד ותעשה תנאי שאם ה ID שנכנס ל get יותר גבוה ממנו אז זה יציג דף שגוי ואם לא אז יציג את הדף שהוא צריך...
ככה זה ימנע הכנסת אותיות וכו' ל GET

קוד:

$id = htmlspecialchars($_GET['newsID']);

  $limitid = "SELECT MAX(ID) FROM news";
  $limitid2=mysql_query($limitid) or die("blah");
  $limitid3= mysql_result($limitid2, 0);

if ($id > $limitid3 || $id < 1)
{
echo "<br><br><div align='center'><img src='img/logo.jpg'><meta http-equiv=\"refresh\" content=\"1; url=$sl\" /> ";
exit();
}


ציטוט:

אתה עוטף כל get באתר קודם כל ב
htmlspecialchars כדי שזה ימנע שימוש בסקריפטים ב get שזה בעצם ההזרקות sql injection
זה XSS, וזה לא מה שימנע SQL INJECTION.

ציטוט:

עוד טיפ ל get תעשה שליפה של ה ID הכי גבוה בטבלה שלך במסד ותעשה תנאי שאם ה ID שנכנס ל get יותר גבוה ממנו אז זה יציג דף שגוי ואם לא אז יציג את הדף שהוא צריך...
ככה זה ימנע הכנסת אותיות וכו' ל GET
מה? למה? זה באמת בזבוז משאבים נוראי. למה? תן לי סיבה אחת. שיכניס מצידי 1000001. איך זה יפגע בתפקוד המערכת?

ציטוט:

וגם ב textarea אתה שם htmlspecialchars חפש את זה בגוגל תבדוק איך עושים את זה.
מה? htmlspecialchars ל-textarea באופן מיוחד? למה באופן מיוחד?

ואני יכול לנחש למה אתה מתכוון, ובאמת - זה גם, אני אצטט את המגיב מהדיון השני - "שיטה מטופשת". זה בגלל שאתה עושה nl2br ואז htmlspecialchars. מה שהסברת לו זה איך לבזבז משאבים באופן לא יעיל.

זה נחמד ומבורך לעזור, אבל אל תטעה אותו.

dabi 11-07-08 12:27

סבבה אז אם אני משתמש ב htmlspecialchars אני מוגן לחלוטין מXSS???

kfir91 11-07-08 13:02

ציטוט:

נכתב במקור על ידי MasterT (פרסם 649596)
זה XSS, וזה לא מה שימנע SQL INJECTION.


מה? למה? זה באמת בזבוז משאבים נוראי. למה? תן לי סיבה אחת. שיכניס מצידי 1000001. איך זה יפגע בתפקוד המערכת?


מה? htmlspecialchars ל-textarea באופן מיוחד? למה באופן מיוחד?

ואני יכול לנחש למה אתה מתכוון, ובאמת - זה גם, אני אצטט את המגיב מהדיון השני - "שיטה מטופשת". זה בגלל שאתה עושה nl2br ואז htmlspecialchars. מה שהסברת לו זה איך לבזבז משאבים באופן לא יעיל.

זה נחמד ומבורך לעזור, אבל אל תטעה אותו.

אני משתמש ב id עם התנאי יותר לאסתטיקה ורצינות מאשר להגנה כי זה לא ממש מגן
ככה שאם לא קיים עמוד כזה הוא מראה דף עם שגיאה שאין עמוד כזה זה יותר רציני ככה.
דבר שני אפשר להכניס ב textarea סקריפטים. התג htmlspecialchars מונע את האפשרות הזאת. ולדבר הראשון שאמרת ברור שזה ימנע איך תוכל להכניס קודים שונים ל get עם יש על זה Htmlspeacilchars :\

עריכה וגם במשתמשים בתנאי הזה שרשמתי שם זה מונע אפשרות להכניס תווים לא חוקיים כמו ;,` וכו'.. (שמי שמבין בפריצות יודע שהתווים האלה הם חלק גדול)

Daniel 11-07-08 13:04

ציטוט:

נכתב במקור על ידי kfir91 (פרסם 649637)
אני משתמש ב id עם התנאי יותר לאסתטיקה ורצינות מאשר להגנה כי זה לא ממש מגן
ככה שאם לא קיים עמוד כזה הוא מראה דף עם שגיאה שאין עמוד כזה זה יותר רציני ככה.
דבר שני אפשר להכניס ב textarea סקריפטים. התג htmlspecialchars מונע את האפשרות הזאת. ולדבר הראשון שאמרת ברור שזה ימנע איך תוכל להכניס קודים שונים ל get עם יש על זה Htmlspeacilchars :\

למה פשוט לא לעשות שאם $DB->rows = 0.

באמת? שלח לי textarea, אני מכניס בה סקריפטים.

חיפשתי וחיפשתי, ואין שום פונקציה בשם htmlspeacilchars...

אם היה לי זמן הייתי גומר את התגובה בזה, אבל,
קוראים לזה SQL INJECTION.

kfir91 11-07-08 13:07

ציטוט:

נכתב במקור על ידי MasterT (פרסם 649640)
למה פשוט לא לעשות שאם $DB->rows = 0.

באמת? שלח לי textarea, אני מכניס בה סקריפטים.

חיפשתי וחיפשתי, ואין שום פונקציה בשם htmlspeacilchars...

אם היה לי זמן הייתי גומר את התגובה בזה, אבל,
קוראים לזה SQL INJECTION.

על מה אתה מדבר איפה אתה חי במאה ה 15
ברור שיש פונקצית htmlspeacilchars חפש בגוגל.
זה ב php זה מנטרל את התגי html שאתה כותב ב textarea ו get
אם אני שם את זה בtextarea אין סיכוי שאתה מכניס סקריפטים ניסיתי ולא הלך.

Eran-s 11-07-08 13:20

ציטוט:

נכתב במקור על ידי kfir91 (פרסם 649642)
על מה אתה מדבר איפה אתה חי במאה ה 15
ברור שיש פונקצית htmlspeacilchars חפש בגוגל.
זה ב php זה מנטרל את התגי html שאתה כותב ב textarea ו get
אם אני שם את זה בtextarea אין סיכוי שאתה מכניס סקריפטים ניסיתי ולא הלך.

הוא רמז שאתה מתכוון ל-htmlspecialchars.

Daniel 11-07-08 13:28

ציטוט:

נכתב במקור על ידי kfir91 (פרסם 649642)
על מה אתה מדבר איפה אתה חי במאה ה 15
ברור שיש פונקצית htmlspeacilchars חפש בגוגל.
זה ב php זה מנטרל את התגי html שאתה כותב ב textarea ו get
אם אני שם את זה בtextarea אין סיכוי שאתה מכניס סקריפטים ניסיתי ולא הלך.

חיפשתי שוב. אין. Eran-s אני לא רומז על כלום =)

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

aviho1 11-07-08 14:48

תעשה replce לגרש זה ימנע את רוב ההזרקות.

Daniel 11-07-08 15:51

ציטוט:

נכתב במקור על ידי aviho1 (פרסם 649679)
תעשה replce לגרש זה ימנע את רוב ההזרקות.

ומה? ואם המשתמש כותב גרש, זה יחסום לו? מאוד לא טוב. מאוד מאוד לא טוב.

kfir91 11-07-08 17:25

מאסטר מה אתה מבלבל תשכל בטח שיש אל תחפור סתם
מה הקשר HTML עזוב אם אתה לא מבין אל תדבר
http://www.php.net/htmlspecialchars

Daniel 11-07-08 19:52

kfir91. אני באמת שונא לעשות את זה, אבל מה שאמרת לו זה חבורה של שטויות ביחד.

htmlspecialchars "מנטרל" את ה-HTML, כדי שלא יהיה ניתן לתפעל סקריפטים - הוא לא "מנטרל" את הסקריפטים, אלא מונע את הפעלתם. הגבתי לך על כל "השטויות" שכתבת. תקרא, תפנים.

Striker 11-07-08 20:14

^^ תנו לבנאדם תשובה נורמלית.
בתכלס HTMLSPECIALCHARS מכסה XSS.
יש מספר דרכים לחסום SQL INJ והקלה שבהם היא בדיקה אם המשתנה הוא מספרי (במקרים של ID ) או הסרה של " ' (ישנה פונקציה בPHP עבור זה)

kfir91 11-07-08 22:51

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

Daniel 11-07-08 23:12

ציטוט:

נכתב במקור על ידי kfir91 (פרסם 649811)
אוי ואבוי יענו אתה לא יודע שמנטרל ומונע זה אותו דבר ?
מה אתה תופס אותי במילים העיקר הכוונה אפשר לחשוב בעיקרון זה נכון מה שאמרתי עשית ממני טמבל לחלוטין שלא מבין ממה שהוא אומר

ציטטתי לך את כל מה שאמרת, ומתחת לכל שורה סתרתי אותה...

kfir91 12-07-08 02:07

סתרת בצורה חריפה שממש כל מה שאמרת די דומה.

Kfir.G 12-07-08 09:55

שמע כפיר בתכלס אנשים פה מנסים לעזור אחד לשני וזה שאתה לא יודע לקבל את הביקורת של מתכנתים מנוסים ומתקדמים יותר ממך זאת באמת בעיה... למשל הבדיקה המטופשת וחסרת התועלת שעשית עם הID... אתה פשוט בודק אם ID הוא מספרי ואם כן אתה מכניס אותו לשאילתה. במקרה שמספר השורות המוחזרות הוא אפס הID שגוי. אין טעם לשאילתה נוספת. עכשיו בנוגע למה שאמרת עם htmlspecialchars דבר ראשון כשאתה נותן למשתמש הסבר הכולל שימוש בפונקציה מן הראוי שלפחות תכתוב אותה כמו שצריך בלי שגיאות כתיב. דבר נוסף שעלה פה היא הנקודה של דניאל. מה שהפונקציה הזאת עושה זה פשוט לנטרל תגי HTML על ידי החלפת תווי HTML מיוחדים כמו <,> וכד'. מה שזה אומר שאתה מנטרל את הקוד אבל לא מסיר אותו. שמע כפיר אני מבין שיש לך רצון לעזור אבל באמת לא ראוי שתעזור בנושאים שאתה לא מבין בהם ותטעה אנשים אחרים. אם זכרוני אינו מטעני אתה עצמך ביקשת עזרה לגבי אותו הנושא בדיוק.

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

עכשיו לפותח האשכול.
מה שאני ממליץ לך לעשות זה להסתכל על קוד מקור של מערכות גדולות למשל VB או IPB ולראות איך שם פתרו את הבעיה. למרות שיש יתרונות לכך שאתה שואל בפורום. אני למשל לא הייתי מעלה על דעתי שמישהו ישתמש בשאילתה בצורה כל כך סתמית כמו כפיר אבל מסתבר שיש. עכשיו אחרי שראיתי שהדבר הזה קיים אני אדע שבעתיד כשמישהו שואל כדאי להוסיף דרך לבדיקה שלא מבזבזת משאבים בצורה סתמית כל כך..

יום טוב,
כפיר

dabi 12-07-08 19:53

חלאס לריב כמו ילדים קטנים
לסיכום אני צריך תשובות
האם
htmlspecialchars מכסה XSS
ואיך אני מכסה SQL INJ ???
בבקשה בלי מריבות


כל הזמנים הם GMT +2. הזמן כעת הוא 11:30.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ