dedlfix: Sicherheit von GET

Beitrag lesen

Tach!

Es ist im Allgemeinen nicht notwendig, überflüssige Parameter/Variablen zu entfernen. Solange diese nicht genutzt werden kann da stehen, was will. Das Sicherheitsproblem gab es früher mit register_globals in Zusammenarbeit mit einer schlampigen Programmierweise. Wenn Variablen vor dem Erstgebrauch nicht gezielt mit einem definierten Wert belegt werden, konnten sie über register_globals mit einem Wert vorbelegt werden.

[code lang=php]
error_reporting(0);
//
    if ( count($_GET) == 3 ) {

Auch diese Abfrage halte ich aus Sicherheitsgesichtspunkten für überflüssig. Lediglich Bots, die eine andere Parameterzahl verwenden werden damit ausgeschlossen. Aber diese müssten durch eine Inhaltsanalyse der gewünschten Werte bereits wirksam ausgeblendet werden können.

  if ( isset($\_GET["v"],$\_GET["s"],$\_GET["h"]) ) {  
  	function unr\_gl() {  

Funktionsdefinitionen sollten extra stehen und nicht mitten im Programmfluss auftauchen. So ist das unsauberer Stil.

  	Function remote\_status ($get\_v, $get\_s, $get\_h) {  
  		$get\_h = strtolower($get\_h);  
  			if ( $get\_v == 'A') {  
  				$insert = "update table set ".$get\_v." = ".$get\_v." + '".$get\_s."' where col = '".$get\_h."';";  
  			} else {  
  				$insert = "update table set ".$get\_v." = '".$get\_s."' where col = '".$get\_h."';";  
  			}  
  		mysql\_query($insert);  
  	}  

Die Maskierung solte beim Erzeugen des SQL-Statements erfolgen und nicht irgendwo ganz anders im Code. Wenn man nur diese Funktion ansieht, hat die Funktion SQL-Injection-Lücken, besonders im else-Fall. Die Funktion selbst prüft $get_v nicht und maskiert keine Werte, sie ist darauf angewiesen, dass das vor ihrem Aufruf passiert. Wenn man das vergisst, ...

dedlfix.