if und xor - unlogisches Verhalten

Ich persönlich löse solche Abfragen mit einem Array
PHP:
function sanitize($s){
// @todo überprüfe den wert
return $s;
}

if(!in_array(sanitize($_GET['action']), array('new', 'change', 'delete', 'deletepicture')) {
   echo ....;
  exit;
}
Da er ja nicht nur $_GET['action'] sondern auch $_POST['action'] prüfen will, eher so:
PHP:
function sanitize( $s )
{
    // @todo überprüfe den wert
    return $s;
}

if( !in_array( sanitize( $_POST['action'] ), array( 'new', 'change' ) ) ||
    !in_array( sanitize( $_GET['action']  ), array( 'delete', 'deletepicture') ) )
{
    echo '...';
    exit;
}
(wobei das OR ja noch nicht abschließend geklärt wurde)

Gruß
 
Wie ist eure Meinung zu $_REQUEST. Gibt es Nachteile wenn man das verwendet?
PHP:
function sanitize($s){
// @todo überprüfe den wert
return $s;
}

if(!in_array(sanitize($_REQUEST['action']), array('new', 'change', 'delete', 'deletepicture')) {
   echo ....;
  exit;
}
 
In $_REQUEST sind auch die Daten von $_COOKIE und (wenn ich mich nicht täusche) von $_SESSION – das könnte ein Problem sein. Ansonsten würde doch das gehen:
PHP:
function sanitize($s){
// @todo überprüfe den wert
return $s;
}

$data = array_merge($_POST, $_GET);

if(!in_array(sanitize($data['action']), array('new', 'change', 'delete', 'deletepicture')) {
   echo ....;
  exit;
}
 
und (wenn ich mich nicht täusche) von $_SESSION
Da täuschst du dich. ;)

Das Problem mit $_REQUEST ist
1. Du weißt nicht genau woher die Variable nun eigentlich kommt GET/POST/Cookie.
2. Sollte Cookie eine Variable enthalten die auch in GET oder POST vorkommt dann wird ersteres letztere überschreiben.
3. Aus Punkt 2 ergibt sich dann logischerweise die Gefahr von xss/csrf
 
In $_REQUEST sind auch die Daten von $_COOKIE und (wenn ich mich nicht täusche) von $_SESSION – das könnte ein Problem sein. Ansonsten würde doch das gehen:
PHP:
function sanitize($s){
// @todo überprüfe den wert
return $s;
}

$data = array_merge($_POST, $_GET);

if(!in_array(sanitize($data['action']), array('new', 'change', 'delete', 'deletepicture')) {
   echo ....;
  exit;
}
Bleibt die Frage ob $_POST['action'] und $_GET['action'] zur selben Zeit gesetzt sein können.

Aber nur um action zu prüfen ein array_merge zu machen, halte ich für Speicherverschwendung. :p

Gruß
 
Bleibt die Frage ob $_POST['action'] und $_GET['action'] zur selben Zeit gesetzt sein können.
Nein können nicht.
Das ist das gleiche wie ich oben unter Punkt 2 geschrieben habe.

Die Reihenfolge der Abarbeitung wird bestimmt über variables_order

Bei Mehrfachem vorkommen von Variablen überschreiben letztere logischerweise die vorangegangenen.
Die Standardreihenfole Get, Post, Cookie.
 
Nein können nicht.
Das ist das gleiche wie ich oben unter Punkt 2 geschrieben habe.

Die Reihenfolge der Abarbeitung wird bestimmt über variables_order

Bei Mehrfachem vorkommen von Variablen überschreiben letztere logischerweise die vorangegangenen.
Die Standardreihenfole Get, Post, Cookie.
Du hast meinen Satz nicht ganz verstanden.

Die Frage ist:
Kann in dem System von dwex (Threadstarter) $_POST['action'] und $_GET['action'] zur selben Zeit gesetzt sein. Kommt es also vor, dass er zu einem bestimmten Zeitpunkt beide verarbeiten will?

Gruß
 
Ohne darauf einzugehen was abgefragt werden soll
Setze zusätzliche Klammern man kann nie sagen was denn den Vorzug hat das XOR oder das Ungleich

um die reihenfolge der Verarbeitung sicherzustellen Klammern!

(a xor b) != (c xor d)
ist was andres wie
a xor ( b != c ) xor d
 
Zuletzt bearbeitet:
Und ich wette um eine Flasche Pommes das zuerst das XOR gemacht werden soll in der IF Abfrage :-)

ich habe mir angewöhnt alles in Klammern zu setzen - hilft auch beim Lesen vom Code nach länger Zeit
 
Zurück