Injektion sicheres Registerscript

04/25/2011 00:29 danny-98#1
Streberteil
register.php
Code:
<h3 class="title"></h3> 
 <div id="text">

 <?php

 function exist($account){
 $sql = "SELECT * FROM ACCOUNT_TBL WHERE account='".$account."'";
 $result = mssql_query($sql);
 if(!$result) {
 die("MSSQL Error");
 }
 $check = mssql_num_rows($result);
 return $check;
 }





 if(isset($_POST['submit']))
 {
 $server = "PROGRAMMING-PC\SQLExpress";
 $user = "sa";
 $pass = "Zkowcvrzhtq5";
 $salt = "kikugalanet";

[COLOR="Red"] $username = htmlspecialchars(stripslashes($_POST['username']));
 $password = htmlspecialchars(stripslashes($_POST['password']));
 $password2 = htmlspecialchars(stripslashes($_POST['password2']));
 $ip = trim(htmlspecialchars($_POST['ip']));[/COLOR]

 ################################################## ###########

 [COLOR="#ff0000"]if(strlen($username) < 4 ||
 strlen($username) > 16)[/COLOR]
 {
 die("Dein Benutzername ist zu kurz/lang .<br>Er muss zwischen <b><u>4 und 16</u></b> Zeichen lang sein .");
 }

 if(strlen($password) < 4 ||
 strlen($password) > 16)
 {
 die("Dein Passwort ist zu kurz/lang .<br>Es muss zwischen <b><u>4 und 16</u></b> Zeichen lang sein .");
 }

 if($password != $password2)
 {
 die("Die Passwˆrter stimmen nich ¸berein.");
 }

 if (preg_match('/[^a-zA-Z0-9]/',$username)) 
 {
 die("Der Benutzername enthält unerlaubte Zeichen.");
 }
 if (preg_match('/[^a-zA-Z0-9]/',$password)) 
 {
 die("Das Passwort enthält unerlaubte Zeichen.");
 }

 ################################################## ###########

 $conn = mssql_connect($server,$user,$pass);

 if(!$conn)
 {
 die("Connection failed!<br>");
 }

 $select = mssql_select_db("ACCOUNT_DBF",$conn);

 if(!$select)
 {
 die("Can't select Database!<br>");
 } 

 ################################################## ###########

 if(exist($username) != '0')
 {
 die ("Der Benutzername ".$username." wird schon benutzt .");
 }



 ################################################## ###########

 // $username = strtolower($username);
 //$password = strtolower($password);
 $password = md5($salt . $password);

 $ipadress = $ip;
 mssql_query("USE [ACCOUNT_DBF]
 SET NOCOUNT ON
[COLOR="#ff0000"] INSERT INTO ACCOUNT_TBL (account, password, id_no1, id_no2, isuse, member, realname, cash)
 VALUES ('$username', '$password', '$password', '$password', 'T', 'A', 'F', '1000')
 INSERT INTO ACCOUNT_TBL_DETAIL (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, email)
 VALUES ('$username', 'A000', '2', 'F', '17.04.2010', '17.04.2010', '20990101', '20050101', 'O', '$email')");[/COLOR]




 if($execute)
 {
 echo 'Account wurde <font color="green">erfolgreich</font> erstellt !';
 }
 else
 {
 echo 'Account wurde <font color="green">erfolgreich</font> erstellt !';
 }

 mssql_close($conn); 
 }
 else
 {


 ?>
 <center>
 <form action="register.php" method="post">
 <table>
 <tr>
 <td colspan="2" align ="center">
 <h3>Account erstellen</h3>
 </td>
 </tr>
 <tr>
 <td align ="right">
 Account :
 </td>
 <td>
 <input type="text" size="20" name="username" maxlength="[COLOR="#ff0000"]16[/COLOR]" />
 </td>
 <td>&nbsp;</td>
 </tr>
 <tr>
 <td align ="right">
 Passwort :
 </td>
 <td>
 <input type="password" size="20" name="password" maxlength="32" />
 </td>
 </tr>
 <tr>
 <td align ="right">
 Passwort widerh. :
 </td>
 <td>
 <input type="password" size="20" name="password2" maxlength="32" />
 </td>
 </tr>
 <tr>
 <td>
 <input type="hidden" size="20" name="ip" maxlength="32" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>"/>
 </td>
 </tr>
 <tr>
 <td colspan="2" align="center">
 <input type="submit" name="submit" value="Account erstellen" />
 </td>
 </tr>
 </table>
 </form>
 </center>
 <?php
 }
 ?>

 </div>

 <br>
 <br>
 <br>
04/25/2011 00:31 Daniiii#2
sehr schön wie du 2 fertige scripts zusammengeschmissen hast.
04/25/2011 00:31 ~Product~#3
das gibt es schon mehrere 10000n mal
04/25/2011 00:33 danny-98#4
nein ich habe es umgeschrieben und es injektionsicher gemacht versuch doch mal die standartinjektion
' or '1'='1' --
das llerzeichen hinter den -- nicht vergessen
okay ich makier die entscheidenen stellen nochmal
04/25/2011 09:30 Jay Niize#5
Hmm.. Bis 16 Zeichen, na?

';shutdown;--

Hat nur 13 Stellen, und weg ist der Server :3

Mein Tipp : Macht es bis maximal 10, dann gibts keine Injetcs mehr, bzw SQL Injects. Xss Könnte ei einer unsicheren HP noch drin sein :3

Achja : Gibts schon in Homepage Addons, aber trotzdem nett gemeint :)
04/25/2011 11:25 danny-98#6
Nein injektion geht bei dem script nicht das script wandelt das ' z.b. in einen html specialchar
04/25/2011 13:58 Pumbaaa#7
Quote:
Originally Posted by Jusikid View Post
Hmm.. Bis 16 Zeichen, na?

';shutdown;--

Hat nur 13 Stellen, und weg ist der Server :3

Mein Tipp : Macht es bis maximal 10, dann gibts keine Injetcs mehr, bzw SQL Injects. Xss Könnte ei einer unsicheren HP noch drin sein :3

Achja : Gibts schon in Homepage Addons, aber trotzdem nett gemeint :)
Mhmmm bist wohl nen ganz schlaues Kerlchen.
Nur halt gibts in php auch Befehle, die bestimmte Zeichen sperren....
04/25/2011 14:01 Yokomi#8
jo,selber meinung wie pumaa, das ist die einzige moeglichkeit.
mil laengenaenderung etc lol das ist schwachsinn. Hat eigentlich hier irgentjemand schonmal von firebug gehoert, ich glaub ich bin der einzige....
04/25/2011 14:04 Pumbaaa#9
Ich kenn Firebug, aber wenn dus per php auf 10 Zeichen reduzierst, was natürlich Schwachsinn ist, funktioniert das auch nicht ;D
04/25/2011 18:55 danny-98#10
Bestimmte zeichen sperren zu lassen ist aber leistungsaufwendiger
und so kleiner guck dir die function erstmal genau an bevor du laberst
[Only registered and activated users can see links. Click Here To Register...]
und das script filtert auch die illegalen zeichen raus versuch doch mal nen injektion code man-.-'