Hallo,

Ik heb een paar dagen geleden een HTTPRequest gemaakt met jQuery, Ajax en PHP die de data dmv een $_POST meegeeft, dan data ophaalt uit een database en daarmee de content opnieuw inlaadt.

Een vriend van mij heeft gezegt dat deze manier heel makkelijk te hacken is, maar voor dat ik kon vragen waarom ging hij alweer offline.

Kan iemand van jullie mij misschien uitleggen waarom deze methode onveilig is?

Alvast bedankt.
-Richard

Dit is mijn code:

//File: contentswitch.js
$(document).ready(function() {
	$("#menu ul li").click(function() {
		var Title = $(this).attr("title");
		$('#content').fadeOut();
		
		$.post("contentswitch.php", { page: Title }, function(data) {
			$('#content').html(data);
		});
	});
});

//File: contentswitch.php
<?php
	if(isset($_POST['page'])) {
		include 'database.php';
		include 'functions/convertdate.php';
		include 'functions/getcontent.php';
		echo getContent($_POST['page']);
	}
//getContent is een functie die de content uit mijn database haalt,
//vandaar include 'database.php';
?>
Iedereen kan van alles invoeren in het $_POST['page'] en daarmee bijv. tabellen uit je database verwijderen en je database gegevens bemachtigen.
Oh..

Wat kan ik doen om dat tegen te gaan?
De ingevoerde data controleren voordat je iets ophaalt uit de database.
Waar moet ik op controleren dan bijvoorbeeld?
quotjes? commas?
Met de mysql_real_escape_string(); kom je al een eind, maar een nette error afhandeling mag niet ontbreken.
Gewoon hetzlefde waar je ook op controleert bij het verzenden van een formulier.
Sorry, maar ik snap niet helemaal wat jullie bedoelen.
Die moet die functie toepassen op de POST, GET en COOKIE variabelen welke je binnen je mysql_query() gebruikt.
Dus wat moet ik nou doen? Bepaalde characters filteren? Ik snap het allemaal niet meer.

Reageren