הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 30-05-10, 11:36   # 1
HOLD
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2008
הודעות: 623

HOLD לא מחובר  

איך לשפר את האבטחה באתר?

כרגע זה הקוד שמאחזר נתונים:

PHP קוד:
$Id $_GET['id'];
if(!
ctype_digit($Id)) header('Location:404.php') or die;
$Id mysql_real_escape_string($Id);
$result=mysql_query("SELECT Name,Date,Text FROM Users WHERE Id=".$Id,$link); 
האם יש כאן חור אבטחה?

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

תודה.
  Reply With Quote
ישן 30-05-10, 12:59   # 2
~The_Sultan~
חבר על
 
מיני פרופיל
תאריך הצטרפות: Oct 2008
הודעות: 771

~The_Sultan~ לא מחובר  

מה זה $link?
ואתה יכול לעשות דבר כזה לדעתי:
PHP קוד:
$Id $_GET['id']; 
if ((!
is_numeric($Id)) || ($Id <= 0))
   
header("Location: 404.php");

$Id mysql_real_escape_string($Id); 
$result=mysql_query("SELECT Name,Date,Text FROM Users WHERE Id=".$Id,$link); 
זה פשוט בודק אם ID זה מספר בעזרת הפונקציה is_numeric, וכמובן שה-AUTO INCREMENT של תאי ID לא יכול להיות 0 או מינוס לכן זה בודק גם את זה.
  Reply With Quote
ישן 30-05-10, 14:07   # 3
HOLD
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2008
הודעות: 623

HOLD לא מחובר  

ציטוט:
נכתב במקור על ידי ~The_Sultan~ צפה בהודעה
מה זה $link?
ואתה יכול לעשות דבר כזה לדעתי:
PHP קוד:
$Id $_GET['id']; 
if ((!
is_numeric($Id)) || ($Id <= 0))
   
header("Location: 404.php");

$Id mysql_real_escape_string($Id); 
$result=mysql_query("SELECT Name,Date,Text FROM Users WHERE Id=".$Id,$link); 
זה פשוט בודק אם ID זה מספר בעזרת הפונקציה is_numeric, וכמובן שה-AUTO INCREMENT של תאי ID לא יכול להיות 0 או מינוס לכן זה בודק גם את זה.
תודה.
(אם מישהו רוצה להוסיף או משהו הוא מוזמן.)
  Reply With Quote
ישן 30-05-10, 14:34   # 4
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

$id = intval($_GET['id']

יהפוך אותו להיות מספרי ואם יכניסו שם שטויות הוא יהפוך להיות 0
  Reply With Quote
ישן 30-05-10, 19:46   # 5
Daniel
אחראי פורום
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 2,875

Daniel לא מחובר  

בקוד שהבאת יש חור אבטחה רציני.

header לא מבטל את פעולה הסקריפט. הדפדפן יכול "להתעלם" מה-Location, וכמובן - העיבוד ימשך. הדרך שבה אתה מזהה היא בסדר לחלוטין. אפשר גם להשתמש ב-intval, אבל שימוש ב-ctype_digit והפנייה לדף שגיאה נחשב עדיף - רק לא לשכוח לשים exit; / die(); אחרי ה-header
  Reply With Quote
ישן 30-05-10, 22:05   # 6
רומן
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Dec 2005
מיקום: באר שבע
גיל: 37
הודעות: 405
שלח הודעה באמצעות ICO אל רומן

רומן לא מחובר  

עדיף לך לבדוק בדרך הזו:

PHP קוד:
if((int) $id 0
  Reply With Quote
ישן 30-05-10, 22:41   # 7
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

אני רואה שתי אופציות חכמות, אחת להמיר את המשתנה לint (עדיף על ידי casting ולא על ידי intval, הרבה יותר מהיר) מה שחוסם לחלוטין את האופציה להכניס משתנה לא תקין. האופצייה השנייה היא לוודא תקינות בעזרת is_int וזהו.
אופציה 1:
PHP קוד:
$Id = (int)$_GET['id'];
$result=mysql_query("SELECT Name,Date,Text FROM Users WHERE Id=".$Id,$link); 
אופציה 2:
PHP קוד:
$Id $_GET['id'];
if(!
is_int($Id)) {
    
header('Location:404.php');
    die;
}
$result=mysql_query("SELECT Name,Date,Text FROM Users WHERE Id=".$Id,$link); 
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 31-05-10, 11:25   # 8
HOLD
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2008
הודעות: 623

HOLD לא מחובר  

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

header לא מבטל את פעולה הסקריפט. הדפדפן יכול "להתעלם" מה-Location, וכמובן - העיבוד ימשך. הדרך שבה אתה מזהה היא בסדר לחלוטין. אפשר גם להשתמש ב-intval, אבל שימוש ב-ctype_digit והפנייה לדף שגיאה נחשב עדיף - רק לא לשכוח לשים exit; / die(); אחרי ה-header
אם אני עושה ככה:

PHP קוד:
header('Location:404.php') or die; 
זה מונע מהדפדפן להתעלם? או שצריך לרשום את ה-die שורה מתחת?

תודה לכל המגיבים.
  Reply With Quote
ישן 31-05-10, 12:38   # 9
~The_Sultan~
חבר על
 
מיני פרופיל
תאריך הצטרפות: Oct 2008
הודעות: 771

~The_Sultan~ לא מחובר  

ההבדל בין הפעולה exit ל-die() זה ש-exit מסיימת את פעילות הצד שרת ו-die() מסיימת אותה עם אפשרות לביצוע פעולה כלשהי. אני חושב שאתה יכול לעשות פשוט ככה:
PHP קוד:
die(header("Location: 404.php")); 
גם מה שאתה כתבת אמור לעבוד.
  Reply With Quote
ישן 04-06-10, 12:50   # 10
HOLD
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2008
הודעות: 623

HOLD לא מחובר  

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

header לא מבטל את פעולה הסקריפט. הדפדפן יכול "להתעלם" מה-Location, וכמובן - העיבוד ימשך. הדרך שבה אתה מזהה היא בסדר לחלוטין. אפשר גם להשתמש ב-intval, אבל שימוש ב-ctype_digit והפנייה לדף שגיאה נחשב עדיף - רק לא לשכוח לשים exit; / die(); אחרי ה-header
איך אני יכול להתעלם מה-location?
ואם אני משתמש ב-or die() זה שקול לזה שאני ארשום die() שורה מתחת? או שיש בזה חור אבטחה?
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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