|
הרשם | ![]() |
שאלות ותשובות | ![]() |
רשימת חברים | ![]() |
לוח שנה | ![]() |
הודעות מהיום | ![]() |
חיפוש | ![]() |
|
![]() |
![]() |
|
כלים לאשכול | תצורת הצגה |
![]() |
# 1 |
משתמש - היכל התהילה
|
הגנה מפני sql injection
אהלן,
אני מאמין שורבכם מתעסקים בזה בכל מערכת, יש לי מערכת גלריה שמקבלת ב GET את מספר העמוד,ולפי זה מציגה את התמונות. כמובן עשיתי שאם יש לי רק 4 עמודים ומישהו מקליד את המספר 7 במקום זה יציג לו את העמוד האחרון. ב GET השתמשתי ב mysql_real_escape_string אבל אם אכניס רק את התו ' זה עדיין יציג לי שגיאה של SQL. יש עוד דרכים להתגונן מפני sql injection? |
![]() |
![]() |
# 2 |
חבר וותיק
|
אם אלה עמודים, תשתמש בפונקצייה intval
או להפך בבדיקה של REGEX : קוד:
preg_match("/^[0-9]+$/", $page); |
![]() |
![]() |
# 3 |
עסק רשום [?]
|
להעשרה:
http://wp.tutsplus.com/tutorials/cre...with-wordpress http://vip.wordpress.com/2011/10/13/...d-sanitization הדוגמאות כאן הן על וורדפרס, זה ממש לא קריטי. ספר מומלץ בנושא: http://www.amazon.com/Pro-PHP-Securi.../dp/1430233184 Last edited by אדיר; 04-08-12 at 17:32.. |
![]() |
![]() |
# 4 |
Whatever
|
PHP קוד:
__________________
תומר |
![]() |
![]() |
# 5 |
עסק רשום [?]
|
תומר, זה בדיוק מה שלא נחוץ לעשות (וזאת הסיבה שציינתי את 2 הקישורים בתגובה שלי).
במקרה הזה - כאשר אנחנו מצפים לקלט שהוא מספר שלם, אנחנו נקבל אותו אך ורק אם הוא מספר שלם, אין שום סיבה לבצע עליו סינון כלשהו (ובטח שלא להמיר אותו למספר). צריך לבצע אימות די פשוט: אם הקלט הוא מספר שלם, ממשיכים, אם לא - אין סיבה להמשיך. (בהתאם למקרה) אם המספר גדול מ- 0, ממשיכים, אם לא - אין סיבה להמשיך. ההמשך ידוע. |
![]() |
![]() |
# 6 |
עסק רשום [?]
|
if(is_numeric($_GET['id'])){
//other checks }
__________________
![]() איציק ברבי - שירות לקוחות כתובת אתר: http://build-net.co.il/ איימל: Support@build-net.co.il טלפון: 052-3937296. |
![]() |
![]() |
# 7 | |
חבר מתקדם
|
http://php.net/manual/en/function.is-numeric.php
ואני אצטט את הדוגמא.. ציטוט:
__________________
הורדת שירים מיוטיוב, הורדת שירים, שירים להורדה, שירים להורדה מיוטיוב, העלאת תמונות |
|
![]() |
![]() |
# 8 | ||
חבר מתקדם
|
ציטוט:
אגב עדיף לעשות שימוש ב-real_escape, או בכלל לעבור לשימוש בPDO. ציטוט:
והנה הדוגמה: PHP קוד:
PHP קוד:
__________________
![]() HIGHDESIGN.co.il עיצוב ובניית אתרים. |
||
![]() |
![]() |
# 9 | |
עסק רשום [?]
|
ציטוט:
הדוגמה השנייה היא bad practice, רצוי להימנע מביצוע casting למשתנה (אם הוא לא מה שהוא אומר להיות, שלא יהיה בכלל או שנקבע אותו לערך ברירת מחדל כלשהוא). |
|
![]() |
![]() |
# 10 |
חבר בקהילה
|
אם כבר משתמשים ב mysql
http://php.net/manual/en/ref.pdo-mysql.php בקצרה: אחת הסיבות שעשו את הדרייבר הזה הוא בשביל להעביר את ההגנה לדרייבר עצמו לדוגמא: קוד:
$sth = $dbh->prepare('SELECT name WHERE id = :id'); $id = '1'; $sth->bindParam(':id', $id, PDO::PARAM_INT); Last edited by perfeito; 04-08-12 at 23:04.. סיבה: ex |
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|