eval() code zorgt voor foutmeldingen

Status
Niet open voor verdere reacties.

5blabla5

Gebruiker
Lid geworden
27 apr 2009
Berichten
485
Goeiemiddag!

Ik wou vandaag maar eens wat doen aan mijn php kennis, en heb wat dingen gedaan met de functie eval(). Als ik echter probeer een soort van shell te maken, werkt het niet: ik krijg verschillende foutmeldingen. Ik heb geprobeerd de code (die wordt verstuurd via een formulier) te filteren van bijvoorbeeld openingstags, en ik heb het laten echo'en in een buffer (wordt dus opgevangen in een buffer). Ik heb nog steeds last van foutmeldingen:

Code:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /Volumes/Apache/phpcs.php(49) : eval()'d code on line 1

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /Volumes/Apache/phpcs.php(49) : eval()'d code on line 1

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /Volumes/Apache/phpcs.php(49) : eval()'d code on line 1

Bij het invoeren van:

Code:
echo 'hello world!';

Met de volgende php code:

PHP:
<?php
	
	// Turn on error reporting
	ini_set('display_errors', 1); 
	error_reporting(E_ALL);

	// Check if something is posted
	if($_SERVER['REQUEST_METHOD'] == 'POST' || isset($_POST['submit'])) {
	
		// Check if code is posted
		if(isset($_POST['code'])) {
		
			// Filter code
			$code = $_POST['code'];
			$code = str_replace('<'.'?'.'php', '', $code);
			$code = str_replace('<'.'?', '', $code);
			$code = str_replace('?'.'>', '', $code);
			$code = stripslashes($code);
			
			// Catch code when displayed
			ob_start();
			echo $code;
			$code = ob_get_contents();
			ob_end_clean();
		
			// DANGEROUS FUNCTION: eval()
			// Execute posted code
			eval($_POST['code']);
			
		} else {
		
			echo 'No code posted!';
			
		}
	
	} else {
	
		echo '<form method="POST" action="">'.PHP_EOL.
			'<textarea name="code" style="width: 100%; height: 90%;">Post some code :-)</textarea><br />'.PHP_EOL.
			'<input type="submit" name="submit" value="Execute" />'.PHP_EOL.
			'</form>';
	
	}
	
?>

En ja, ik weet dat eval() zeer gevaarlijk is, vooral op deze manier. Het is alleen puur voor educatieve doeleinden :rolleyes:
 
Wat probeer je uit te voeren? Misschien wel handig om te weten.
 
Hm ik zie zo niks fout gaan, maar je beseft dat je $_POST['code'] verplaatst naar $code, het dan bewerkt, en vervolgens alsnog de onbewerkte versie probeert uit te voeren? Dat kan er mee te maken hebben :P

Het probleem kan ook zijn dat je magic_quotes aan hebt staan wat opzich af te raden is.
 
Ik zal even kijken naar men server configuratie, en ik doe idd iets met de post, en gebruik de originele :o
Dom van me! Ik zal vanavond even kijken!
 
Oke, heb effe gekeken, en nadat ik $_POST['code'] vervangen had door de gefilterde $code gaf hij de output die ik verwacht had! Magic_quotes hoefde dus niet uit, gelukkig :D

Opgelost
 
Volgens mij heb ik sowieso geen magic_quotes aan staan bij men MAMP configuratie, want ik gebruik PHP versie 5.3.7... Vanaf 5.3.0 is het al geschrapt.
Het gaat me vooral om het niet willen *****n met server configuratie :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan