PHP Skript gegen SQL Injection absichern

- OCinside.de PC Forum
https://www.ocinside.de

-- Software
https://www.forum-inside.de/forums.cgi?forum=17

--- PHP Skript gegen SQL Injection absichern
https://www.forum-inside.de/topic.cgi?forum=17&topic=9152

Ein Ausdruck des Beitrags mit 4 Antworten ergibt bei 3 Antworten pro Seite ca. 2 DIN A4 Seiten. Das entspricht bei 80 g/m² ca. 9.98 Gramm Papier.


-- Veröffentlicht durch wakko0816 am 20:11 am 22. Juni 2011


Doch interessehalber, was macht man denn sonst noch außer Strings escapen?

"mysql_real_escape_string" ist schon mal ein guter Anfang,
damit ist man dann zumindest für die MySQL Verbindung
auf der sicheren Seite. Ob das Ding aber auch HTML oder Javascript
zuverlässig entschärft ist aber eine andere Frage.
Der Joomla-eigene DB-Layer macht vermutlich noch ein paar
Sachen mehr, als einfach nur einzelne kritische Zeichen zu Escapen,
deshalb sollte der die erste Wahl sein.


-- Veröffentlicht durch GenialOmaT am 11:10 am 22. Juni 2011

Ja diese API gibt es tatsächlich, nur hab ich erstmal den Weg gewählt, den ich am schnellsten umsetzen konnte.. Mal sehen wie ichs mache, werd wohl versuchen das über Joomla zu realisieren.. Doch interessehalber, was macht man denn sonst noch außer Strings escapen?


-- Veröffentlicht durch wakko0816 am 21:12 am 21. Juni 2011

Joomla hat höchstwahrscheinlich nen DB-Abstraktions-Layer, der
(hoffentlich) einigermassen sicher sein sollte. Schau mal in den
Joomla-Code, ob Du da was findest. Vermutlich gibt es sogar ne
interne Joomla-API, mit der man User anlegen kann. Also das sollte
in jedem Fall die erstere Wahl sein, bevor man da am CMS vorbei in
der DB rumwurschtelt. Strings escapen alleine ist in der Regel nicht ausreichend. Da sollte man schon mehr machen.


-- Veröffentlicht durch GenialOmaT am 18:48 am 21. Juni 2011

Nabend allerseits!

Habe mir mal ein kleines Script geschrieben, um bei Joomla automatisch einen Benutzer anzulegen, aufgerufen wird das Skript über ein Batch Skript.. Jetzt habe ich mal bei Wikipedia ein wenig über SQL Injection gelesen, was ja theoretisch möglich sein dürfte.. Bin mir aber nicht ganz sicher, wie ich das Skript am besten absichere, bei Wikipedia sind zwar Beispiele für PHP aber der Satz:

"Ab PHP 5.1 sollten PHP Data Objects für Datenbankabfragen verwendet werden."

macht mich ein wenig stutzig, heißt dass das ich den DB Zugriff grundsätzlich anders realisieren sollte als jetzt der Fall?

Wäre cool, wenn mir jemand ein paar Tipps geben kann :)

Code
<?
$secret = "secret";
if($_GET["s"]!=$secret)
  {
  echo "<meta http-equiv='refresh' content='3;URL=http://www.domain.de'>";
  exit;
  }
?>

<?
$name = $_GET["n"];
$user = $_GET["u"];
$pw = $_GET["p"];
$mail = $_GET["m"];  

$salt = md5(mt_rand());

$crypt = md5($pw.$salt);
$password = $crypt.':'.$salt;

$verbindung = mysql_connect("localhost", "db" , "pw")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("db") or die ("Datenbank konnte nicht ausgewählt werden");

mysql_query("INSERT INTO jos_users( name, username, password, email, usertype, gid ) VALUES( '$name', '$user', '$password', '$mail', 'Registered', 18 )");
mysql_query("INSERT INTO jos_core_acl_aro( section_value, value ) VALUES ( 'users', LAST_INSERT_ID() )");
mysql_query("INSERT INTO jos_core_acl_groups_aro_map( group_id, aro_id ) VALUES ( 18, LAST_INSERT_ID() )");

echo "Benutzer angelegt"

?>


Edit:

Folgendes habe ich jetzt angepasst:

Code
mysql_query("INSERT INTO jos_users( name, username, password, email, usertype, gid ) VALUES( 'mysql_real_escape_string($name)', 'mysql_real_escape_string($user)', 'mysql_real_escape_string($password)', 'mysql_real_escape_string($mail)', 'Registered', 18 )");


Reicht das schon?

(Geändert von GenialOmaT um 19:05 am Juni 21, 2011)


OCinside.de PC Forum
© 2001 - 2024 www.ocinside.de