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

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

Kfir.G 04-12-07 17:16

[PHP] טיפול קלט
 
עריכה:
הנושא היה אמור להיות טיפול בקלט :P
שלום,
יש לי תופס שבו המשתמש שולח מידע ואני מעביר אותו ככה
PHP קוד:

$content$_POST['msg'];
$contenthtml_entity_decode($content);
$tags    "<p><h1><font><ol><ul><li><hr>"
        
."<blockquote><a><img><embed><strong>"
        
."<em><u><strike><sup><sub>";
$contentstrip_tags($content,$tags); 

ובכל זאת משתמשים מצליחים להחדיר תגים שהstrip_tags אמור להוריד... מה עושים?
תודה מראש
כפיר

Meir 04-12-07 17:29

התיאור פה מתאים לבעיה שלך אני חושב: http://marc.info/?l=bugtraq&m=108981589117423.

DanielS 04-12-07 17:47

שוב טעות נפוצה במקום לאפשר הכל ולחסום חלק.
תחסום הכל ותאפשר חלק.
או אם אתה רוצה לחסום את כל הHTML תשתמש בhtmlspecialchars()

Kfir.G 04-12-07 17:47

ציטוט:

נכתב במקור על ידי Meir (פרסם 586902)
התיאור פה מתאים לבעיה שלך אני חושב: http://marc.info/?l=bugtraq&m=108981589117423.

יכול להיות שככה משתמשים מצליחים לעקוף את זה ויכול להיות שלא...
בכל מקרה לא ממש הצלחתי למצוא את הפתרון עצמו לבעיה בעמוד הזה... ממה שהבנתי זאת
http://security.e-matters.de/gpg_key.asc
אמורה להיות הצפנה של הפתרון אבל לא ממש הבנתי איך לבטל את ההצפנה...
בכל מקרה תודה על העזרה ואני אשמח לשמוע הצעות נוספות לפתרון :)

ציטוט:

נכתב במקור על ידי DanielS (פרסם 586912)
שוב טעות נפוצה במקום לאפשר הכל ולחסום חלק.
תחסום הכל ותאפשר חלק.
או אם אתה רוצה לחסום את כל הHTML תשתמש בhtmlspecialchars()

במקרה שלא שמת לב אני חסמתי הכל ואפשרתי חלק... רשימת התגים בTAGS אלו הם התגים המותרים! לשימוש כל השאר אסורים...

Meir 04-12-07 18:12

תנסה את זה:

PHP קוד:

<?php
$string 
'test tag <script> and <p>';

function 
check_tag($tag) {
    if (
in_array(str_replace('/'''$tag), array('p''b''hr''a'))) {
        return 
'<'.$tag.'>';
    }
    return 
false;
}

echo 
preg_replace('/<(.*?)>/ie''check_tag("\\1")'$string);
?>


Kfir.G 04-12-07 18:57

ציטוט:

נכתב במקור על ידי Meir (פרסם 586923)
תנסה את זה:

PHP קוד:

<?php
$string 
'test tag <script> and <p>';

function 
check_tag($tag) {
    if (
in_array(str_replace('/'''$tag), array('p''b''hr''a'))) {
        return 
'<'.$tag.'>';
    }
    return 
false;
}

echo 
preg_replace('/<(.*?)>/ie''check_tag("\\1")'$string);
?>


לא עובד לי...
ד"א מה בדיוק עושה \\1?

Meir 04-12-07 19:13

מעביר את התוצאה מהביטוי הרגולרי לפונקציה, שים לב שהפונקציה מאפשרת רק את התגים שנמצאים במערך בתוך הפונקציה delete כלומר רק את: p, b, hr וa.

ותוסיף את התיקון הבא:

PHP קוד:

str_replace(array('/'' '), ''$tag

כי יש תגים שנוהגים להכניס בהם רווח כמו hr.

Kfir.G 04-12-07 20:32

ציטוט:

נכתב במקור על ידי Meir (פרסם 586943)
מעביר את התוצאה מהביטוי הרגולרי לפונקציה, שים לב שהפונקציה מאפשרת רק את התגים שנמצאים במערך בתוך הפונקציה delete כלומר רק את: p, b, hr וa.

ותוסיף את התיקון הבא:

PHP קוד:

str_replace(array('/'' '), ''$tag

כי יש תגים שנוהגים להכניס בהם רווח כמו hr.

בכל מקרה הפונקציה שלך מורידה את הכל חוץ מ <שם התג> וזה לא מה שאני צריך... אני צריך שאם זה תג מאושר הכל ישאר...

Daniel 04-12-07 21:12

ברגע שאתה מאפשר תג אחד-הכל פרוץ. תשתמש ב-htmlspecialchars.

Meir 04-12-07 21:28

ציטוט:

נכתב במקור על ידי kfir_dnd (פרסם 586967)
בכל מקרה הפונקציה שלך מורידה את הכל חוץ מ <שם התג> וזה לא מה שאני צריך... אני צריך שאם זה תג מאושר הכל ישאר...

http://lives.co.il/kfir.php


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

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