SQL, min kod är sårbara för SQL Injections.
Hejhej.
Sitter och pillar lite med PHP och MSSQL. Håller på att fixa en adminlogin till sidan, men den fungerar inte som den ska och det är möjligt att använda sig av SQL Injections. Det skumma är att jag har kopierat koden från min "användarlogin" som fungerar som den ska och såvitt jag vet är den inte sårbar för SQL injections (Mycket möjligt att den ändå är det dock).
Här är koden för min SÅRBARA adminlogin:
<?php
session_start();
$dbhost = "*********";
$dblogin = "********";
$dbpass = "********";
$db_name = "members";
$connect = mssql_connect("$dbhost", "$dblogin", "$dbpass")or exit("cannot connect");
$select = mssql_select_db("$db_name")or exit("cannot select DB");
$username = $_POST['login'];
$password = $_POST['password'];
$md5_pass = md5($password);
$db_check = "SELECT id FROM [members].[dbo].[admin] WHERE login='$username'AND passw='$md5_pass'";
$db_query = mssql_query($db_check);
$nums = mssql_num_rows($db_query);
if($nums == 1){
session_register("username");
$_SESSION['username'] = $username;
header("Location: nwindex.php?page=signedin");
} else{
$close = mssql_close();
$ip = getenv('REMOTE_ADDR');
$browser = getenv('HTTP_USER_AGENT');
$date = date('l dS \of F Y H:i:s ');
$newconnect = mssql_connect("$dbhost", "$dblogin", "$dbpass")or exit("cannot connect");
$newselect = mssql_select_db("$db_name")or exit("cannot select DB");
$db_store_login_fails = "INSERT INTO [members].[dbo].[loginfail]([IP],[BROWSER],[USER_ATTEMPT],[FORM],[DATE])VALUES('$ip','$browser','$username','Admin Login','$date')";
$db_store_qry = mssql_query($db_store_login_fails);
echo "<font color='red' face='verdana' size=2><br><br>Unauthorized!</font><br><br>";
}
?>
Här är koden för ANVÄNDARLOGIN, (Som ICKE (?) är sårbar):
<?php
session_start();
$dbhost = "*******";
$dblogin = "*********";
$dbpass = "************";
$db_name = "members";
$connect = mssql_connect("$dbhost", "$dblogin", "$dbpass")or exit("cannot connect");
$select = mssql_select_db("$db_name")or exit("cannot select DB");
$username = $_POST['username'];
$password = $_POST['pass'];
$md5_pass = md5($password);
$db_check = "SELECT usr FROM [members].[dbo].[user] WHERE usr='$username'AND password='$md5_pass'";
$db_query = mssql_query($db_check);
$nums = mssql_num_rows($db_query);
if($nums == 1){
session_register("username");
$_SESSION['username'] = $username;
header("Location: nwindex.php?page=signedin");
} else{
$close = mssql_close();
$ip = getenv('REMOTE_ADDR');
$browser = getenv('HTTP_USER_AGENT');
$date = date('l dS \of F Y H:i:s ');
$newconnect = mssql_connect("$dbhost", "$dblogin", "$dbpass")or exit("cannot connect");
$newselect = mssql_select_db("$db_name")or exit("cannot select DB");
$db_store_login_fails = "INSERT INTO [members].[dbo].[loginfail]([IP],[BROWSER],[USER_ATTEMPT],[FORM],[DATE])VALUES('$ip','$browser','$username','User Login','$date')";
$db_store_qry = mssql_query($db_store_login_fails);
echo "<font color='red' face='verdana' size=2><br><br>Unauthorized!</font><br><br>";
}
?>
Det går att injecta vad som helst i stort sett, t.ex ' or 1=1--
eller någon lite "ondare" som t.ex: ' or ID='1' INSERT INTO [members].[dbo].[user]([usr],[password],[fullname],[mail])VALUES('I', 'CAN ', 'INJECT', 'SQL')--
Så, varför är min "adminlogin" sårbar men inte min "userlogin"?
Tack på förhand /Crazzir
Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510