View Single Post
ישן 01-06-06, 08:01   # 5
Eli-Hai
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 2,758

Eli-Hai לא מחובר  

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

ישנן מספר פונקציות, אשר יעזרו לך לדעת אם ה$_GET מכיל -
  • אותיות (abc)
  • מספרים (123)
  • אותיות ומספרים (abc123)
ברגע שהוא מוצא אותיות, הוא יכול להדפיס שגיאה (הMySQL), וכך בעצם לגרום לשגיאות, אך אנחנו נחסום זאת עם פונקציה פשוטה, is_numeric().

הקוד הוא פשוט, וכתבתי לך קוד קל לדוגמא,
PHP קוד:
$page $_GET['p'];

if( empty(
$page) ) exit("Error: Costum Error.");
elseif( !
is_numeric($page) ) exit("Error: Costum Error."); 
מה שהוא בעצם עושה, תחילה הוא בודק אם ה$_GET שלנו ריק, אם הוא לא ריק, הוא בודק אם הוא מכיל אותיות, אם אחד מהתנאים יחזיר שגיאה, הוא בעצם יעצור את התוכנית, ולא יתן לה להמשיך. מה שחוסך עלינו שימוש בתנאי נוסף, לשיאלתה שתבוא לפלט העמוד.

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

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

PHP קוד:
$id $_GET['id'];

$sql "SELECT * FROM `table` WHERE `id` = " $id;
$result mysql_query($sql) or die(mysql_error());

$count mysql_num_rows($result);
    if(
$count == 0) exit("Article don't exists");

while(
$output mysql_fetch_object($result))
    echo 
$output->article

Last edited by Eli-Hai; 01-06-06 at 08:07..
  Reply With Quote