Post eens de relevante code, te beginnen met de in de stack trace genoemde bestanden rond de genoemde regels
Link gekopieerd
J
J C
28-05-2016 15:59
gewijzigd op 28-05-2016 16:04
Ben bang dat dat het hele probleem wordt, ik weet niet welke bestanden.
Index.php is namelijk alleen een verzameling van includes en variabelen.
Het enige dat ik kan vinden zou dit kunnen zijn:
<?php
if(isset($_GET['logout'])){
del_inlog();
header("location: ./index.php");
exit;
}
if(isset($_POST['login']))
{
$password = $_POST['mw_pass'];
//check personal salt
$saltqry = $connection->query("
SELECT
salt,
mw_gegevens_groep
FROM
mw_gegevens
WHERE
mw_gegevens_persnr='".$_POST['mw_user']."'
");
($erroruitkomst = $saltqry->fetch_assoc());
if($saltqry->num_rows == 0)
{
$salt='';
}
else
{
$salt = $erroruitkomst['salt'];
}
include_once('inlog/passcrypt.php');
$userpassword = $Nieuw_ww;
$mw_gegevens_qry = $connection->query("
SELECT
*
FROM
mw_gegevens
WHERE
mw_gegevens_persnr='".$_POST['mw_user']."'
AND
mw_gegevens_pass='".$userpassword."'
AND
mw_gegevens_pass!=''
");
($mwgegevens = $mw_gegevens_qry->fetch_assoc());
if($_POST['mw_user']=='')
{
$aErrors=71;
}
elseif($_POST['mw_pass']=='')
{
$aErrors=8;
}
elseif($_POST['mw_pass']!='' && $_POST['mw_user']!='' && $mw_gegevens_qry->num_rows == 0)
{
$aErrors= 91;
}
elseif($saltqry->num_rows != 0 && $erroruitkomst['mw_gegevens_groep']==7)
{
$aErrors= 11;
}
elseif($saltqry->num_rows == 1)
{
$aErrors=0;
}
else
{
$aErrors=9999;
}
if($_POST['mw_user']=='')
{
$user=0;
}
else
{
$user=$_POST['mw_user'];
}
if($aErrors!=0)
{
$error=$aErrors;
//inlogerror log
include($pathmw.'includes/error.php');
$qry = "
insert into
mw_errorlog
SET
logintime = '".mysql_real_escape_string(time())."',
ipadres = '".$_SERVER['REMOTE_ADDR']."',
mwnr = ?,
melding = '".$aErrors."'
";
$sql = $connection->prepare($qry);
if($qry === false)
{
echo "Query error:.". $connection->error();
}
else
{ $sql->bind_param('i', $user);
$sql->execute();
$sql->close();
$welkom .= '<br/><font color=red>Fout bij inloggen: ' . $errormessage .' </font><br/><br/>';
}
}
else
{
set_inlog($mwgegevens);
if(isset($_GET['pagina']))
{
header("location: ?pagina=".$_GET['pagina']);
}
else
{
header("location: index.php?pagina=home");
}
exit;
}
}
?>
Link gekopieerd
Ariën
28-05-2016 16:28
gewijzigd op 28-05-2016 16:30
Op lijn 19/41 is je $_POST onbeveiligd. SQL-injectie is hier mogelijk.
Link gekopieerd
IK dacht dat dat niet meer mogelijk was met deze nieuwe manier van scripten.
Is dit gewoon op te lossen met mysql_real_escape_string?
Link gekopieerd
Ja, maar ik zie dat je objecten ($connection->...) gebruikt voor je database-functies. Gebruik je soms PDO of MySQLi?
Want mysql_real_escape_string evenals dé andere soortgelijke mysql-functies zijn 'deprecated'
Link gekopieerd
Ik gebruik mysqli, daarom dacht ik dat sql injectie niet meer mogelijk was.
Link gekopieerd
Ariën
28-05-2016 16:42
gewijzigd op 28-05-2016 16:43
Nonsens.....
Daarvoor hebben we dan:
mysqli_real_escape_string of in jouw geval $connection->real_escape_string().
Link gekopieerd
J C op 28/05/2016 15:13:33
Ik kreeg vandaag een email van een bedrijf die aangaf dat mijn inlog script op mijn website de mogelijkheid heeft om gehacked te worden.
Zij konden dit tegen betaling voor ons oplossen. Op zich helemaal geen probleem.
Maar vaag me nu af of het werkelijk onveilig is.
Zij gaven aan dat ze bij het inloggen de volgende melding kregen. UIteraard willen ze niet aangeven hoe deze foutmelding is ontstaan.
foto van de foutmelding
Wat denken jullie is dit gevaarlijk?
Dit balanceert op de rand van afpersing. Wat vooral gevaarlijk is is ingaan op dit soort aanbiedingen, vooral als je de partij niet kent. Ga je wildvreemden toegang geven tot je broncode, waarom neem je dan uberhaupt nog de moeite om veilige applicaties te bouwen? Geef de dieven meteen de huissleutel :p.
Dat gezegd hebbende, het melden+weergeven van fouten op een productie-omgeving is niet zo strak he, deze zouden enkel in een errorlog moeten komen en niet op het scherm van eindgebruikers.
Daarnaast heb je wat rare aannames over MySQLi. Wanneer je aan de slag gaat met loginsystemen zul je meer van de hoed en de rand moeten weten.
Link gekopieerd
Er is natuurlijk wel een verschil in iemand een script laten schrijven en iemand toegang geven tot een ftpserver.
In principe hebik volgens mij ook alle foutmeldingen opgevangen, ik weet alleen niet hoe deze is geproduceerd.
Elke foutmelding wordt bij mij ook nog eens opgeslagen in een tabel. Zo kan ik bepaalde ipadressen bijvoorbeeld ook blokkeren als iemand het eindeloos blijft proberen.
Link gekopieerd
Ariën
28-05-2016 17:00
gewijzigd op 28-05-2016 17:01
J C op 28/05/2016 16:54:11
Er is natuurlijk wel een verschil in iemand een script laten schrijven en iemand toegang geven tot een ftpserver.
Wie heeft het over ftp? ;-)
Verder hoeft een SQL-injection geen PHPerrors te werpen. Het ligt eraan hoe je logging inelkaar steekt.
Link gekopieerd