Seite 1 von 2

Formulare -- > PHP = Unsicher ... was tun ?

Verfasst: 03.09.2005 20:04
von DasFragezeichen
Also, hier ist was aber da wollte ich doch mal wegen der Sicherheit was fragen, lol

(btw, das soll ein Meta-Tag Generator werden ...)

Das ist die meta.php

Code: Alles auswählen

<html>
<head><title>Meta</title></head>
</head>
<body>
<table border="0"><tr><td><b>Titel :</b></td><td>
<form action="meta2.php" method="post">

<input type="text" size="30" name="title"></td>
<input type="submit" value="Generieren !">
</center>
</form>
</body>
</html>
So dann die meta2.php :

Code: Alles auswählen

<?php

$title = $HTTP_POST_VARS["title"];

echo "Geben Sie in den Header : <title>$title</title> ein";

?>
Naja, aber nun könnte man ja als normaler Anwender in das Feld (<input type="text" size="30" name="title">) einfach einen HTML/PHP-Code eintragen der dann dummerweise auchnoch von der meta2.php ausgewertet wird so wenn man sagen wir <a href="http://phpbb.de">phpBB.de</a> schreibt dann erscheint ein Link zu phpBB dort ... Ein Hacker könnte dies ja gut ausnutzen ...

Also, wie macht man es das nur bestimmt Zeichen verwenden kann ?

MfG,
Das-Fragezeichen

Verfasst: 03.09.2005 21:07
von witzigerkiller
Naja, ich würde das erstens so machen:


meta.php

Code: Alles auswählen

<html> 
 <head>
  <title>Meta</title>
 </head> 
</head> 
<body> 
<form action="meta2.php" method="post"> 
<table border="0">
 <tr>
  <td><b>Titel :</b></td>
  <td> <input type="text" size="30" name="title"></td> 
 </tr>
 <tr>
  <td colspan="2><input type="submit" value="Generieren !"></td>
 </tr>
</tabe> 
</form> 
</body> 
</html>
meta2.php

Code: Alles auswählen

<?php 

$title = $_POST['title']; 

echo "Geben Sie in den Header : <title>$title</title> ein"; 

?>
Und dann würde ich manche sachen wie <center>und </center>

durch preg_replace ersetzen:

Code: Alles auswählen

<?PHP

$title = $_POST['title']; 

$codeschlecht [1] = "<center>";
$codeschlecht [2] = "</center>";

$codegut [1] = "";
$codegut [2] = "";

$title = preg_replace($codeschlecht, $codegut, $_POST['title']);

?>
Wobei es bestimmt bessere Metoden gibt, aber das würde ich am geeignetsten finden!

Verfasst: 03.09.2005 21:39
von Jensemann
witzigerkiller hat geschrieben: Und dann würde ich manche sachen wie <center>und </center>

durch preg_replace ersetzen:
Das ächts war der Server ;-) Für einfaches Suchen/Ersetzen tuts auch str_replace(), da muß man keine lahme RegExp Engine mit bemühen.

Verfasst: 03.09.2005 21:41
von witzigerkiller
jensemann hat geschrieben:
witzigerkiller hat geschrieben: Und dann würde ich manche sachen wie <center>und </center>

durch preg_replace ersetzen:
Das ächts war der Server ;-) Für einfaches Suchen/Ersetzen tuts auch str_replace(), da muß man keine lahme RegExp Engine mit bemühen.
Das wollte ich auch schreiben, aber mir ist der Befehl net eingefallen, und preg_replace(); ist ja ungefähr bis sehr genau das gleiche.

Verfasst: 03.09.2005 22:07
von Pyramide
witzigerkiller hat geschrieben:Und dann würde ich manche sachen wie <center>und </center>

durch preg_replace ersetzen:
Wieso gerade <center> und sonst nichts?

Für solche Sachen verwendet man normalerweise [php:htmlspecialchars]

Verfasst: 03.09.2005 22:11
von witzigerkiller
klar ich schrieb doch z.b. <center> ja htmlspecialchars htmlintinities und noch irgendwas mit addslashes oderso, wie das heißt.

Verfasst: 04.09.2005 11:33
von witzigerkiller
meta.php

Code: Alles auswählen

<html> 
 <head> 
  <title>Meta</title> 
 </head> 
</head> 
<body> 
<form action="meta2.php" method="post"> 
<table border="0"> 
 <tr> 
  <td><b>Titel :</b></td> 
  <td> <input type="text" size="30" name="title"></td> 
 </tr> 
 <tr> 
  <td colspan="2><input type="submit" name="Generate" value="Generieren !"></td> 
 </tr> 
</tabe> 
</form> 
</body> 
</html> 

dann habe ich jetzt bissl rumgeschrieben:

meta2.php

Code: Alles auswählen


<?PHP 


if (isset($_POST['Generate']))
{
    if (empty($_POST['title']))
    {
        echo "<font color='red'>Bitte Feld ausfüllen!</font>";
    }
    else
    {
         $title = addslashes(htmlintinities(htmlspecialchars($_POST['title'])));
         echo "Geben Sie in den Header : <title>".$title."</title> ein"; 
    }
} 


?>
Hoffe das hilft ein wenig weiter

Verfasst: 04.09.2005 18:28
von fanrpg
zur meta2.php

müsste das nicht so sein?

Code: Alles auswählen

<?PHP 


if (isset($_POST['Generate'])) 
{ 
    if (!empty($_POST['title'])) 
    { 
        echo "<font color='red'>Bitte Feld ausfüllen!</font>"; 
    } 
    else 
    { 
         $title = addslashes(htmlintinities(htmlspecialchars($_POST['title']))); 
         echo "Geben Sie in den Header : <title>".$title."</title> ein"; 
    } 
} 


?>

Verfasst: 04.09.2005 19:49
von Pyramide
Wie wärs mal mit Ausprobieren anstatt raten? Dann würdet ihr auch feststellen, daß es keine Funktion htmlintinities gibt und daß htmlentities(htmlspecialchars(...)) in 99,9% der Fälle sinnlos ist. Ein einfaches htmlspecialchars(...) oder htmlentities(...) reicht i.d.R. aus.

Verfasst: 04.09.2005 20:32
von witzigerkiller
fanrpg hat geschrieben:zur meta2.php

müsste das nicht so sein?

Code: Alles auswählen

<?PHP 


if (isset($_POST['Generate'])) 
{ 
    if (!empty($_POST['title'])) 
    { 
        echo "<font color='red'>Bitte Feld ausfüllen!</font>"; 
    } 
    else 
    { 
         $title = addslashes(htmlintinities(htmlspecialchars($_POST['title']))); 
         echo "Geben Sie in den Header : <title>".$title."</title> ein"; 
    } 
} 


?>
das! vor empty heißt doch falls es nicht leer ist, kommt fehler. kann das logisch sein?