Sicherheit in PHP Benötige Bitte Hilfe

thehacker

Anhänger der Apachen
Hallo,
ich brauche da mal bitte Hilfe ich will diese Datei:
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Shortener</title>
<link href="./main.css" rel="stylesheet" type="text/css"></link>
</head>
<body>

<?php

if ($_POST['shortbtn']){
	$url = $_POST['url'];
	
	if ($url){
		require("./connect.php");
		
		$charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		$len = 5;
		$numrows = 1;
		
		while ($numrows != 0){
			for ($i = 0; $i <= $len; $i++){
				$rand = rand() % strlen($charset);
				$tmp = substr($charset, $rand, 1);
				$code .= $tmp;
			}
			$query = mysql_query("SELECT * FROM items WHERE code='$code'");
			$numrows = mysql_num_rows($query);
		}
		
		$date = date("F d, Y"); // October 27, 2010
		
		mysql_query("INSERT INTO items VALUES ('', '$url', '$code', '$date')");
		
		$query = mysql_query("SELECT * FROM items WHERE code='$code'");
		$numrows = mysql_num_rows($query);
		
		if ($numrows == 1){
			$site = "http://localhost/Tutorials/URL Shortener";
			echo "Here is your shortened url: <input type='text' size='40' value='$site/$code'>";
		}
		else
			echo "Your info was not added.";
		
		mysql_close();
	}
	else
		echo "<script type='text/javascript'>window.location = './index.php'</script>";
}
else
	echo "<script type='text/javascript'>window.location = './index.php'</script>";

?>

</body>
</html>
Absichern
(gegen sql injection und das Problem wenn ich in ein Input feld einen PHP oder HTML befehl eingebe er Ausgeführt wird...)

Natürlich will ich NICHT das jemand mir das Script um arbeitet sondern nur tipps das ich es später bei anderen Dingen selber machen kann :)
Danke, TheHacker


PS:
Ich will auch noch allen Danken die mir bis jetzt geholfen haben und durch die ich schon viel gelernt habe...:p

PSS:
Noch Info's:
Ja es ist ein URL Kürzer und zwar auf English :)
und ich trenne die Logig noch raus :)
 
Zuletzt bearbeitet:
1. date() liefert ein Warning (oder Notice), wenn date.timezone keinen gültigen Wert besitzt. Wenn du sicher gehen willst, solltest du mittels date_default_timezone_set()-Funktion eine gültige Zeitzone (z.B. "Europe/Berlin") auswählen.

2. Einen INSERT sollte man immer mittels Spalten-Namen durchführen. Tut man das nicht, führt eine Änderung der Tabellen-Struktur immer dazu, dass das Script nicht mehr funktioniert.

3. Dein Script hat keinerlei Fehler-Behandlung bei MySQL-Funktionen, ich würde mindestens ein Logging mittels trigger_error() einbauen (siehe auch mein Tutorial zum Thema Fehlerbehandlung in PHP-Scripts).

4. Den SELECT mit der Kondition $code, der offensichtlich dazu dient, herauszufinden, ob ein Eintrag erfolgreich durchgeführt werden konnte, kannst du dir sparen, wenn du a) Fehlerhandling einbaust oder b) beim INSERT-Query mysql_affected_rows() prüfst.

5. URLs mit Leerzeichen sind unschön. Sorge dafür, das dein "URL Shortener" mit Unterstrich funktioniert, oder dass die beiden Worte zusammen geschrieben sind.

6. Statt rand() würde ich eher mt_rand() verwenden.
 
Zurück