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?
Post eens de relevante code, te beginnen met de in de stack trace genoemde bestanden rond de genoemde regels
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;
	}
}
?>
Op lijn 19/41 is je $_POST onbeveiligd. SQL-injectie is hier mogelijk.
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?
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'
Ik gebruik mysqli, daarom dacht ik dat sql injectie niet meer mogelijk was.
Nonsens.....
Daarvoor hebben we dan:
mysqli_real_escape_string of in jouw geval $connection->real_escape_string().
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.
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.
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.

Reageren