Ich habe dieses kleine PHP-Skript, das eine POST-Variable nimmt und in eine Datei schreibt.Prozentzeichen in PHP Strings
<?php
$fileContents = $_POST["Contents"];
$fileName = $_POST["Name"];
$filePath = $_POST["Path"];
$passcode = $_POST["Passcode"];
if ($passcode != "<passcode>")
die();
if (!is_dir("./upload/$filePath"))
mkdir("./upload/$filePath", 0755, true);
$file = "./upload/$filePath" . $fileName;
$fd = fopen($file, "w");
fwrite($fd, $fileContents);
fclose($fd);
?>
Dies scheint gegeben für die meisten Text gut zu funktionieren, aber in dem Fall, in dem Text ein Prozentzeichen (%) enthält, gegeben wird, tritt die folgende Kuriosität:
fivice = getField(%bind, 0);
Der ursprüngliche Text war:
%device = getField(%bind, 0);
ich schicke die POST-Anforderung mit der folgenden Serveranfrage:
POST path/to/Upload.php HTTP/1.1\nHost: host.com\nContent-Type: application/x-www-form-urlencoded\nContent-Length: <length>\n\n<file data>\n
Dies tritt auch bei vielen anderen Fällen auf, aber, wie Sie sehen können, nicht mit% bind.
Ich suchte nach der Ursache dieser und etwas auf %% gefunden, so habe ich versucht, eine %% - escaper und bekam dies:
%fivice = getField(%%bind, 0);
Gibt es eine Möglichkeit, dieses% Problem zu beheben? Ist das% -Problem ein PHP-Problem oder ein Anforderungsproblem?
Edit: Ich habe versucht mit urlencode/urldecode, aber diese beide konnten das Problem nicht beheben. Dies ist auch bei file_put_contents
aufgetreten, also denke ich, dass es ein Upload-Problem ist.
1.- Sie verwenden POST-Variablen ohne Filter oder Test. 2.- Was ist 'GetField'? –
Dieses Skript ist ein ** ernsthaftes ** Sicherheitsrisiko. – Halcyon
@FritsvanCampen: Ich habe einen Code implementiert, siehe die Änderungen. Es ist vielleicht nicht die sicherste Sache, aber es ist alles, was ich wirklich für jetzt brauche. –