Archiv verlassen und diese Seite im Standarddesign anzeigen : Sicherheitsbedenken
Puh-Bert
30-03-2003, 19:44
Hi,
folgendes: Ich hab eine HTML-Seite mit PHP, die Daten von einem Benutzer entgegennimmt und diese dann in eine Text-EMail schreibt und an einen voreingestellten Nutzer schickt.
Muss ich hier Sicherheitsbedenken bezüglich unzulässiger Eingaben haben? Ich meine, die Daten werden einfach nur in einer HTML-Form eingesammelt und dann so wie sie sind per PHP in die EMail reingeschrieben, kein Datum wird in irgendeiner Weise interpretiert (z.B. dass eine Mail an eine eingebenene Adresse geschickt würde).
Danke
Puh-Bert
so wie sich das bei dir anhört: nein
aber poste lieber mal dein script!
Wie sieht das eigentlich mit dem Verschicken von Viren aus?
mehlvogel
31-03-2003, 08:54
Dazu müsste er ja nen Anhang hinkriegen, das geht ja in der bloßen Nachricht nicht.
Ansonsten, wenn die als Plaintext verschickt wird, seh ich da keine Probleme.
Puh-Bert
31-03-2003, 12:17
Hi,
sinngemäss sieht mein Skript so aus (gekürzt):
<?php
$email_text.= $_POST['nname'].", ".$_POST['vname']."\n";
$email_text.= $_POST['telefon'].", ".$_POST['email'].$_POST['kommentar']."\n";
?>
<html><body>
<?php
if (!isset ($_POST['submit']))
{
?>
<form action="eingabe.php" method="post">
<input type="text" name="vname">
<input type="text" name="nname">
<input type="text" name="telefon">
<input type="text" name="email">
<textarea cols="30" rows="10" name="kommentar"></textarea>
<input type="submit" value="Okay" name="submit">
</form>
<?php
}
else
{
unset ($submit);
$header = "From: daten@meinserver.de";
mail (mein@adresse.de,"Adressdaten",$email_text,$header);
}
?>
</body>
</html>
Wenn dass so in Ordnung ist, dann ne Zusatzfrage:
Wie könnte ich denn derartige Eingaben auf Gültigkeit überprüfen? Gefährlich wirds doch da, wenn solche Eingaben zu Veränderungen an der Seite führen, z.B. man soll einen Namen eingeben der danach auf der Seite angezeigt wird, und ein Böser Wicht trägt z.B. <?php phpinfo(); ?> ein, um Informationen über die Kiste zu bekommen, oder?
Also wärs ja schon mal ne gute Idee, alles was Tags enthält für ungültig zu erklären bzw. besser noch alles was nicht aus Gross-/Kleinbuchstaben besteht (bei Namen), aber wie krieg ich das hin?
Danke
Puh-Bert
Hallo!
Gefährlich wirds doch da, wenn solche Eingaben zu Veränderungen an der Seite führen, z.B. man soll einen Namen eingeben der danach auf der Seite angezeigt wird, und ein Böser Wicht trägt z.B. <?php phpinfo(); ?>
Offensichtlich hast du´s noch nicht ausprobiert, denn sonst würdest du wissen, dass alles was ausgegeben wird nicht nachträglich Serverseitig interpretiert wird... von daher also keine Gefahr ;) !
Das einzige was jemand machen könnte ist mit HTML und Javascript dir die Seite zerstören, aber das bekommst du z.B. durch htmlentities() in den Griff.
Um Strings sinnvoll auf Zeichenvorkommen zu prüfen, solltest du dich mal mit Regular Expressions beschäftigen (mehr dazu hier: http://www.php.net/manual/de/ref.pcre.php)
Puh-Bert
31-03-2003, 15:32
@Gaert
Stimmt, hab ich tatsächlich nicht ausprobiert
Danke allerseits!
Puh-Bert
Smarty hat da was:
<?php
/*
* Smarty plugin
* ------------------------------------------------------------
* Type: modifier
* Name: escape
* Purpose: Escape the string according to escapement type
* ------------------------------------------------------------
*/
function smarty_modifier_escape($string, $esc_type = 'html')
{
switch ($esc_type) {
case 'html':
return htmlspecialchars($string, ENT_QUOTES);
case 'htmlall':
return htmlentities($string, ENT_QUOTES);
case 'url':
return urlencode($string);
case 'quotes':
// escape unescaped single quotes
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
case 'hex':
// escape every character into hex
for ($x=0; $x < strlen($string); $x++) {
$return .= '%' . bin2hex($string[$x]);
}
return $return;
case 'hexentity':
for ($x=0; $x < strlen($string); $x++) {
$return .= '&#x' . bin2hex($string[$x]) . ';';
}
return $return;
case 'javascript':
// escape quotes and backslashes and newlines
return str_replace(array('\\','\'',"\r","\n"), array("\\\\", "\\'",'\r','\r'), $string);
default:
return $string;
}
}
/* vim: set expandtab: */
?>
Ich hab bisher nur das Problem mit escapes ' und " gehabt.
Teile der Mail waren verschwunden und führten zu Informationsverlusten.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.