| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

18-07-2007, 15:28
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
Sicherheit prüfen
Hallo
Es wäre sehr nett, wenn mir jemand folgendes auf Sicherheit prüfen könnte und mir ein paar Tips geben könnte.
Ich danke schon ein mal im Voraus
Vorab: Folgende Codes dienen den Übungszweck. Kommentare habe ich nicht für nötig gehalten, da das ganze nicht zu gross ist/wird.
login.php
PHP-Code:
<!DOCTYPE html Public
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-script.dtd">
<html>
<head><title>ACS Login</title></head>
<body>
<?php
include "connect.php";
include "shc.php";
?>
<center><h1>Willkommen Zum Login in die ACS</h1><br><br>
<form action="logein.php" method="post">
<table border="1" bordercolor="#FF0033">
<tr>
<td width="50%">Name:</td><td width="50%"><input type="text" name="uname"></td>
</tr>
<tr>
<td width="50%">Passwort:</td><td width="50%"><input type="password" name="pwort"></td>
</tr>
<tr>
<td width="50%"><img border="0" height="50" src="grafischer-code.php?ID=<?php echo$ID; ?>" width="200"></td>
<td width="50%"><input name="ID" type="hidden" value="<?php echo$ID; ?>">
<input maxlength="6" name="EingegebenerCode" size="6" type="text"></td></tr>
<tr>
<td><input type="submit" value="Einlogen"</td>
</tr>
</body>
</html>
Bei der Datei connect.php bin ich mir sicher, dass die Datei gut ist
shc.php
PHP-Code:
<?php
$TableCode = "Code";
$Buchstaben = array("A", "B", "C", "D", "E", "F", "G", "H", "K", "M", "N", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y");
$Zahlen = array("2", "3", "4", "5", "6", "7", "8", "9");
for($i = 0, $Code = "", $AngezeigterCode = ""; strlen($Code) < 6; $i++)
{
if(rand(0, 1) == 0 && isset($Buchstaben))
{
$Buchstabe = $Buchstaben[rand(0, count($Buchstaben)-1)];
$Code .= $Buchstabe;
$AngezeigterCode .= $Buchstabe." ";
}
else
{
$Zahl = $Zahlen[rand(0, count($Zahlen)-1)];
$Code .= $Zahl;
$AngezeigterCode .= $Zahl." ";
}
}
$AngezeigterCode = trim($AngezeigterCode);
mysql_query("INSERT INTO $TableCode (Code, AngezeigterCode) VALUES ('$Code', '$AngezeigterCode')");
$ID = mysql_insert_id();
?>
logein.php
PHP-Code:
<?php
session_start();
?>
<?php
include "connect.php";
$TableCode = "Code";
$ResultPointer = mysql_query("SELECT Code FROM $TableCode WHERE ID = '".intval($_REQUEST['ID'])."'");
$Result = mysql_fetch_object($ResultPointer);
if(strtolower($Result->Code) == strtolower($_REQUEST['EingegebenerCode']))
{
$mg = $_POST['uname'];
$pw = md5($_POST['pwort']);
$kontr = "SELECT Mitglied, Passwort FROM admin WHERE Mitglied LIKE '$mg' LIMIT 1";
$ausk = mysql_query($kontr);
$row = mysql_fetch_object($ausk);
if($row->Passwort == $pw) {
$_SESSION['Mitglied'] = $mg;
echo "Login war erfolgreich.<br>
<a href=\"acs.php\">Bitte Hier klicken um in die ACS weitergeleitet zu werden</a>";
}
else {
echo "Benuterz und/oder Passwort ist falsch bitte noch mal versuchen.<br>
<a href=\"login.php\">Hier gehts zurück</a>";
}
}
else {
echo "Bildercode ist falsch! <a href=\"login.php\">Zurück</a>";
}
mysql_close($verbindung);
mysql_error();
error_reporting();
?>
Dann bginnt es mit:
PHP-Code:
<?php
session_start();
?>
<?php
if(!isset($_SESSION['Mitglied'])) {
echo "Bitte zuerst einlogen <a href=\"login.php\">Zum Login</a>";
exit;
}
?>
|

18-07-2007, 15:41
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.280
|
|
Zum Thema Code aufbauen: Ginge so doch schneller
PHP-Code:
$array = array_merge(range('A','Z'),range(2,9));
shuffle($array);
$code = implode('',array_slice($array,0,5));
Gruss
tobi
|

18-07-2007, 15:56
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
Danke Tobi
Den Script habe ich als Tutorial auf webmaster-resource gelesen und angepasst.
Im Script gab es einige Fehler die ich schon behoben habe.
Darum frage ich auch nach, ob das ganze sicher ist.
Das mit array_merge hätte ich auch selbst drauf kommen können -.-
habe gerade erst kürzlich im buch von dem gelesen -.-
Mir geht es hauptsächlich bei dem ganzen um die Sicherhei.
Das mir kein billiger coder das login knackt und dort herumwühlt ^^
|

18-07-2007, 17:54
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.425
|
|
der code sieht alles in allem eher "schlecht" aus.
Und wenn ich dann sowas hier sehe
PHP-Code:
$mg = $_POST['uname'];
$kontr = "SELECT Mitglied, Passwort FROM admin WHERE Mitglied LIKE '$mg' LIMIT 1";
dann hat sich die Frage nach der Sicherheit, denke ich, erledigt. Das sind aber nun wirklich grundlagen. Da muss nicht jeder für jeden seiner Code einen extra Thread aufmachen...
|

18-07-2007, 20:52
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
Was meinst jetzt bei dem?
Direkt in ein mysql querry stopfen oder wie?
oder meinst, inval($_POST['uname']);
???
oder meinst du das mit Passwort und Mitglied, dass man das nicht benützen sollte?
|

18-07-2007, 20:59
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.515
|
|
1. eingabe ungeprüft übernommen
PHP-Code:
$mg = $_POST['uname'];
2. kein like
PHP-Code:
$kontr = "SELECT Mitglied, Passwort FROM admin WHERE Mitglied LIKE '$mg' LIMIT 1";
3. genauer arbeiten, passwort nicht auswählen, nur überprüfen
PHP-Code:
$kontr = "SELECT Mitglied FROM admin WHERE Mitglied = '$mg' AND passwort = '$pw'";
und bitte über sql-injections informieren.
gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-07-2007, 21:49
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
erstmals vielen danke!
genau das mit sql-injections habe ich für mein Gästebuch gesucht.
Ich habe es mal durch gelesen und hoffe, ich habe es richtig verstanden
1.
PHP-Code:
$mg = $_POST['uname'];
Also sollte ich hier erst mal prüfen, ob Sonderzeichen drin sind und diese verbieten (z.B. Anführungszeichen, Prozentzeichen, etc.)
Ok, werde ich mal machen.
3.
PHP-Code:
$kontr = "SELECT Mitglied FROM admin WHERE Mitglied = '$mg' AND passwort = '$pw'";
Das geht O.o? statt Mitglied würde doch auch ein * gehen? Oder ist das zu gefährlich?
|

18-07-2007, 21:54
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.515
|
|
Zitat:
|
Also sollte ich hier erst mal prüfen, ob Sonderzeichen drin sind und diese verbieten
|
hauptproblem ist so was:
PHP-Code:
// eingabe
$_POST['uname'] = 'user WHERE 1=1';
gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-07-2007, 21:56
|
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
In Sachen Maskierung potenziell gefährlicher Zeichen im SQL-Query-String: mysql_real_escape_string aus dem Manual.
Von SELECT * ist abzuraten, insbesondere wenn nicht alle Spalten benötigt werden. Benötigst du nur Spalte_a (oder auch Spalte_b und Spalte_c), dann selektiere auch nur diese. Das gehört (für mich) zum sauberen und übersichtlichen Programmieren und kann auch zur Performance beitragen.
|

18-07-2007, 21:59
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
@Kropf
 Sorry, habe ab und zu mal durcheinander und verstehe nichts
$mg = QB_SECURE_MYSQL_PARAM($_POST['uname']);
Das würde ja schon mal reichen?
|

18-07-2007, 22:36
|
|
JimmDaBimm
Registrierter Benutzer
|
|
Registriert seit: Jun 2007
Beiträge: 53
|
|
Zitat:
Original geschrieben von Griecherus
In Sachen Maskierung potenziell gefährlicher Zeichen im SQL-Query-String: mysql_real_escape_string aus dem Manual.
|
Dazu hab ich auch mal ne Frage; ist addslasches weniger sicher wenn es um Mysql geht? Weil ich lese oft "mysql-real-escape-string" aber so weit ich weiß, bewirt adsslasches das Gleiche... oder gibt es dort gravierende Unterschiede?
|

18-07-2007, 22:45
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.425
|
|
@Mik: "QB_SECURE_MYSQL_PARAM" WTF??? Woher hast du das?
@Jimm:
Zitat:
|
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
|
|

18-07-2007, 22:54
|
|
JimmDaBimm
Registrierter Benutzer
|
|
Registriert seit: Jun 2007
Beiträge: 53
|
|
Zitat:
Original geschrieben von TobiaZ
@Jimm:
|
Hab ich ja... aber addslashes() escaped die genannten Sachen ebenfalls. Deshalb bin ich etwas verwundert.
|

18-07-2007, 23:43
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
http://www.erich-kachel.de/quibui_ap..._schuetzen.php
ist das mit der session eigendlich sicher?
Wären vieleicht Cookies besser?
Geändert von Dj Mik (18-07-2007 um 23:54 Uhr)
|

18-07-2007, 23:55
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.754
|
|
Zitat:
Original geschrieben von JimmDaBimm
Dazu hab ich auch mal ne Frage; ist addslasches weniger sicher wenn es um Mysql geht? Weil ich lese oft "mysql-real-escape-string" aber so weit ich weiß, bewirt adsslasches das Gleiche... oder gibt es dort gravierende Unterschiede?
|
Zum x-ten verflixten Mal:
Dass addslashes das gleiche tut wie mysql_real_escape_string, ist reiner Zufall, und kann sich in Zukunft auch beliebig ändern.
Vielleicht ändert sich DB-seitig mal irgendwas, was die Maskierung weiterer Zeichen notwendig macht - dann wird mysql_real_escape_string sicher entsprechend angepasst - addslashes aber wohl kaum, warum sollte es auch ...
Also: Zum Absichern von Eingaben, die in eine MySQL-Query eingebaut werden, wird mysql_real_escape_string verwendet, weil diese Funktion extra dafür gedacht ist - PUNKT. Wer stattdessen eine andere, die das gleiche zu machen scheint (wie bspw. addslashes), dafür nutzt - ist ein Idiot.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|