PHP Variablen reinigen

Großes Problem,

ich habe Variablen aus einem Formular, und die müssen bereinigt werden,

habe im Moment keine Ahnung wie^^

Ich weiss das es die Befehle

array_walk und array_walk_recursive

gibt, habe aber im Moment keine Ahnung wie ich das denn jetzt anwende,
es sind 4 Variablen die ich von HTML Tags reinigen muss.

Hoffendlich kann mir jemand helfen :qst:

Grüßlis :wink:

Hi,

also ich glaube kaum, das du einfache Variablen mit einer Array-Funktion behandeln willst.

Um einen String komplett von sämtlichen PHP und HTML-Code zu reinigen, kannst du die Funktion strip_tags() verwenden. Diese Methode ist allerdings nicht unbedingt zu empfehlen, da mögliches User-Input verloren geht.

Besser ist die Funktion htmlentities(), die gefährliche Zeichen umwandelt, so dass diese keinerlei Risiko mehr darstellen.

MfG, xcube

habe es bis jetzt so hinbekommen:

array_walk ( $_POST,    'eingabebereinigen' );
array_walk ( $_GET,     'eingabebereinigen' );
array_walk ( $_REQUEST, 'eingabebereinigen' );

function eingabebereinigen(&$value, $key)
{
  $value = strip_tags($value, '<p><br /><b><strong>');

  $value = htmlspecialchars($value, ENT_QUOTES);

  $value = trim($value);
}

Du kannst mir ja gerne sagen was ich machen könnte, aber dann weiss ich immernoch nicht wie^^

[quote=“tintwo”]habe es bis jetzt so hinbekommen:

[code]
array_walk ( $_POST, ‘eingabebereinigen’ );
array_walk ( $_GET, ‘eingabebereinigen’ );
array_walk ( $_REQUEST, ‘eingabebereinigen’ );

function eingabebereinigen(&$value, $key)
{
$value = strip_tags($value, ‘


’);

$value = htmlspecialchars($value, ENT_QUOTES);

$value = trim($value);
}
[/code][/quote]

Mal ne Frage, was willst du eigentlich machen? Wenn man ein POST-Formular absendet, erhält man unter normalen Umständen ein String, den man speziell per $_POST ausliest. Ich würde dir also raten, alle Variable manuell einzulesen, und den Array-Quatsch wegzulassen (ka. vll sind die Arrays für deinen Zeck nötig, dann poste mal dein Skript).

Dann bei der Funktion eingabebereinigen(), was soll das Parameter $key, wenn es eh in der Funktion nicht verwendet wird?

MfG, xcube

Ich sage ja ich habe kaum Ahnung vom bereinigen^^

Das sind meine Variablen:

// formularvariablen $name = $_GET[name]; $email = $_GET[email]; $website = $_GET[website]; $nachricht = $_GET[nachricht];
DIe kommen aus nem Formular und werden dann in einer Datenbank gespeichert, und direkt wieder ausgelesen (Gästebuch prinzip)…

Und dann kann man ja font size 8 milliarden machen und das ganze sieht doof aus^^

Deswegen müssen die HTML Tags abgeändert oder entfernt werden.

Restlicher Code wäre schwachsinn weil eh nur ein und auslesen der datenbank geschrieben steht^^

[quote=“tintwo”]

// formularvariablen $name = $_GET[name]; $email = $_GET[email]; $website = $_GET[website]; $nachricht = $_GET[nachricht];
DIe kommen aus nem Formular und werden dann in einer Datenbank gespeichert, und direkt wieder ausgelesen (Gästebuch prinzip)…

Und dann kann man ja font size 8 milliarden machen und das ganze sieht doof aus^^

steht^^[/quote]

OK, man könnte das bsp. weise so lösen:

[code]

function eingabebereinigen($value)
{

$value = htmlspecialchars($value, ENT_QUOTES);
$value = mysql_real_escape_string($value);
$value = trim($value);
}

// formularvariablen
$name = eingabebereinigen($_GET[‘name’]);
$email = eingabebereinigen($_GET[‘email’]);
$website = eingabebereinigen($_GET[‘website’]);
$nachricht = eingabebereinigen($_GET[‘nachricht’]);[/code]

Das ist vorerst halbwegs sicher, um XSS und SQL-Injection zu vermeiden.

MfG, xcube

return $value;nicht vergessen :ps: !haue

jo :ps:

Ok, vielen Dank, ich probier es mal aus^^

EDIT:

Klappt nicht wirklich^^

Dann sollte es eigentlich selbstverständlich sein, dass du dir zuerst überlegst, was überhaupt zu tun ist und warum - bevor du anfängst, irgendwelchen Käse zusammenzuscripten.

Also, was ist zu “bereinigen”? Was könnte wo “gefährlich” sein, unter welchen Umständen?

Für den Anfang möchte ich mal diese Lektüre empfehlen:
aktuell.de.selfhtml.org/artikel/ … xtwechsel/

Unter Umständen könnten blöde kleine Kinder mein Gästebuc h nutzen und fiese Platzraubende HTML Befehle eintragen, deswegen will ich die FIltern, und so gehts:

function loeschen( $text ) 
{ 
    // Überschriften 
    $tag[] = '<h1>'; 
    $tag[] = '<h2>'; 
    $tag[] = '<h3>'; 
    $tag[] = '<h4>'; 
    $tag[] = '<h5>'; 
    $tag[] = '<h6>'; 
    $tag[] = '</h1>'; 
    $tag[] = '</h2>'; 
    $tag[] = '</h3>'; 
    $tag[] = '</h4>'; 
    $tag[] = '</h5>'; 
    $tag[] = '</h6>'; 

    // Schriftattribute 
    $tag[] = '<small>'; 
    $tag[] = '</small>>'; 
    $tag[] = '<big>'; 
    $tag[] = '</big>>'; 
    $tag[] = '<font>'; 
    $tag[] = '</font>'; 

    // Links 
    $tag[] = '<a>'; 
    $tag[] = '</a>'; 

    foreach ($tag AS $tag ) 
    { 
      $string = str_replace('$tag','',$text); 
    } 
            return $string; 
} 

// formularvariablen 
$name = loeschen($_GET[name]); 
$email = loeschen($_GET[email]); 
$website = loeschen($_GET[website]); 
$nachricht = loeschen($_GET[nachricht]);

Danke euch …

Hat sich erledigt.

Und du bist sicher, dass das alles ist, was du “filtern” willst?

Na gut, dann probiere ich’s halt mit einer hübschen Tabelle - oder gar einem JavaScript.

Und wieso filterst du eigentlich nur klein geschriebene Tags aus?
Und wieso filterst du eigentlich keine Tags aus, denen ich bspw. noch ein Attribut mitgebe?

Nein, hat es nicht - alles andere als das.

Und genau das ist auch der Grund, warum ich dir sagte, du sollst dir gründlich überlegen, was unter welchen Umständen “gefährlich” werden könnte - offenbar hast du’s bisher noch nicht getan.

Es gibt für sowas BB-Codes. Lass das ganze durch htmlspecialchars laufen und ersetze die BB-Codes und dann hat sich die Sache.