Ist das sicher?

slaughter89

Mitglied
Hi, ich habe eine Frage:

Ist das hier sicher?

PHP:
$name = my_stripslashes($_GET['name']);
$email = my_stripslashes($_GET['email']);

function my_stripslashes($var) {
    if(get_magic_quotes_gpc()) {
        // wenn magic_quotes_gpc auf 1 steht

        // mach was um die Slashes wieder wegzumachen.
     $var = stripslashes($var);
    }
return $var;
}

$result = mysql_query("INSERT INTO ".DB_PREFIX."posts (name, email) VALUES('mysql_real_escape_string($name)', 'mysql_real_escape_string($email)')");

Oder sollte man noch htmlspecialchars() verwenden?
 
ich würde es so machen:
PHP:
	function ParseInsert($var) {
		if(get_magic_quotes_gpc()) {
			return addslashes(htmlentities(stripslashes($var)));
		} else {
			return addslashes(htmlentities($var));
		}
	}
 
Zuletzt bearbeitet:
Hi

Meiner Meinung nach reicht einfach prinzipiell auf jede variable addslashes(), und beim auslesen ein stripslashes(), oder nicht?

Code:
$result = mysql_query("INSERT INTO ".DB_PREFIX."posts (name, email) VALUES('".addslashes($name)."', '".addslashes($email)."')");

Gruß
Laura
 
Zuletzt bearbeitet:
Kommt drauf an wie man es weiterverarbeitet!

Wenn du zum beispiel addslashes() machst und danach stripslashes() ist es zwar für die DB gefiltert, es hat sich jedoch nicht am String geändert. D.h. der "Böse Code" (vielleicht XSS) wird in seiner eingabe form ausgegeben
 
Zuletzt bearbeitet von einem Moderator:
DataFox:
nein, so leicht ist addslashes() leider nicht, da es von magic_quotes_gpc() abhängt:
Die PHP-Direktive magic_quotes_gpc hat standardmäßig den Wert on, so dass grundsätzlich die Funktion addslashes() auf alle GET-, POST- und COOKIE-Daten angewendet wird. Verwenden Sie daher die Funktion addslashes() nicht, wenn Strings bereits durch magic_quotes_gpc escaped wurden, ansonsten erhalten Sie doppeltes Escaping. Um herauszufinden, ob der Parameter aktiviert ist, verwenden Sie am Einfachsten die Funktion get_magic_quotes_gpc().
http://www.php.net/manual/de/function.addslashes.php

/edit
die fkt htmlentities wandelt zudem die alle zeichen in html-codes um... (so wie suf***** geschrieben hat)
 
Zuletzt bearbeitet:
Ich hab da einen Code rumfliegen den ich verwende. Ich bin bisher ganz gut damit ausgekommen:
PHP:
<?php
/**
 * Bereitet einen String für eine Mysql-Abfrage vor.
 * @param string $Param Die Variable welche aufbearbeitet werden soll.
 * @param resource $resource Die Verbindung zur Datenbank.
 * @return Der aufbearbeitete String.
 */
function mysql_prepare_string($Param, $resource)
{
	// String holen
	$string = $Param;
	
	
	// Je nach aktivierten Modulen Quotes und Slashes entfernen
    if(get_magic_quotes_gpc()) 
	{
        if(ini_get('magic_quotes_sybase')) 
		{
            $string =  str_replace("''", "'", $string);
        } 
		else 
		{
            $string = stripslashes($string);
        }
    } 
    // Mysql-Escape Funktion ausführen
	return mysql_real_escape_string($string, $resource);	
}



/**
 * Erstellt einen sicheren Mysql-Query
 * @param string $query Der Formatquery (Syntax wie bei sprintf)
 * @param array $vars Ein Array Mit den Variablen welche eingesetzt werden sollen.
 * @param resouce $resource Die Verbindung zur Datenbank. 
 */
function mysql_secure_query($query, $vars, $resource)
{
	// Alle Variablen vorbereiten
	foreach($vars as $var)
	{
		$var = mysql_prepare_string($var, $resource);
	}
	
	// Query Parsen.
	return vsprintf($query, $vars);	
}


/////////////
// Beispiel
/////////////
// Verbinden etc.
$query = mysql_secure_query('SELECT * FROM `%s` WHERE `NUserID`="%s";', array('UsUser', $_GET['UID']), $resource);
// ...

?>
 
Es sollte noch strip_tags() verwendet werden, damit der User keinen HTML-Code mit einbauen kann.

>Um es zusammenzufassen:

PHP:
function prepareUpload($var)
{
    if(get_magic_quotes_gpc()) 
		$var =  stripslashes($var);
	return addslashes(htmlentities(strip_tags(trim($var))));

}
 
Zuletzt bearbeitet von einem Moderator:
Ok, habe das ganze jetzt etwas umgebaut und noch htmlentities() hinzugefügt, weil ich das ganze wieder ausgeben will.

So sollte es nun doch sicher sein, oder?

PHP:
function b2w_stripslashes($var) {
	if(get_magic_quotes_gpc()) {
		$var = stripslashes($var);
	}
return $var;
}

function b2w_secure($var) {
	if (!is_numeric($var)) {
		$var = "'".mysql_real_escape_string($var)."'";
	}
return htmlentities($var);
}

$blabla = b2w_stripslashes($_GET['blabla']);

$result = mysql_query("INSERT INTO ".DB_PREFIX."posts (text) VALUES (".b2w_secure($blabla).");
 

Neue Beiträge

Zurück