session variablen nicht in der URL weitergeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anbieter
beitrag
beleidigung
datei
inhalt
leiste
login
lukas
null
pa
pawort
sandkasten
session
show
sicherheit
status
stehen
username
variable
vorteil
-
Ich habe eine frage wie mache ich das das die Seesions gespeichert werden akktzeptiert werden und die die von der URL eingegeben wurden nicht da es giwisse leute gestern gab die mein cms gehackt haben sie haben der variable status den wert 3 gegeben und somit waren sie admins. nun habe ich die datenbank wieder hergestellt und m?chte den bug beheben um die homepage wieder online zu stellen.
eine l?sung habe ich aber diese l?sst auch variablen in der url leiste ?bergeben aber es fragt noch das passwort in den sessions ab.
w?re echt dankbar f?r jeden ratschlag -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich benutze Sessions wie folgt:
Zu Beginn der Datei:
session_start();
Und wenn ich jetzt $UserID in die Session schreiben will, mache ich so:
$_SESSION['UserID'] = $UserID;
Dann bei einer verlinkten Datei einfach wieder zu Beginn
session_start();
$UserID = $_SESSION['UserID'];
Und der alte Wert von $UserID ist f?r mich verf?gbar. Allerdings setzt bei mir der Server immer einen Cookie, der die Session-ID speichert.
Aber das macht ja eigentlich nichts.
Es gibt eine M?glichkeit komplett ohne Cookies, aber die kenne ich nicht - ich kenn mich mit Sessions nicht so aus, aber da du gesagt hast
w?re echt dankbar f?r jeden ratschlag
Habe ich das mal geschrieben.
MfG lagerhaus -
f?r mich h?rt sich das so an, als ob du weder register_globals noch superglobale je geh?rt h?ttest.
nach deiner beschreibung h?rt sich das so an, als ob du die variablen einsetz ohne sie vorher zu pr?fen.. 2 nehmen ich mal an, das du register globas auf ON hast. und dein cms auch so programmiert hast. herzlichen gl?ckwunsch bei einigen wird dein cms nicht laufen. abgesehen davon siehst du ja was passiert, wenn man einfach so irgendwelche variablen eisetzt ohne sie zu ?berpr?fen.
verwende superglobale. $_GET, $_POST,$_COOKIE, $_SESSION je nach dem auf was f?r eine 'usereingabe' du zugreifen willst.
?berpr?fe die eingaben.
ansonsten setz dich mit sicherheit auseinander und biete vorerst dein cms nicht zum download an!
und nun mal hier klicken und gut durchlesen:
http://de.php.net/manual/de/security.php -
also ich benutze in der login datei session_register(); und umm sie wieder abzurufen $_SESSION[""]; in meinem buch steht das session_register(); nicht mehr benutzt werden solte, was gibt es denn sonst noch was sicherer ist und wie wende ich es an.
ich danke allen f?r ihre antworten -
Sessions benutzen Cookies, wenn sie vom Surfer erlaubt werden, und keine, wenn sie nicht erlaubt werden.
Aber session ist die Sicherste daten?bergabe.
Klingt mir eher so, als ob du bei nem Get feld oder sowas nicht ?berpr?ft hast. -
vie meinst du das mit dem get also ich habe es so gemacht wie oben beschrieben
-
da zumindest ich ?ber keine glaskugel verf?ge, und auch keine hellseherischen kr?fte habe kann ich nur raten...
und nach deiner beschreibung oben h?rt sich alles nach einem schlampigem umgang mit variablen an.
entweder zu postest hier den betroffenem teil des scripts (bitte sch?n orginal)+ ein kleines beispiel wie du deine session auf 'g?ltigkeit' ?berpr?fst... sollte das script zulang sein, dann stell das script als txt oder per highlight_file zum angucken als link.
sonst kommen wir hier nicht weiter. -
so hier die codes
login.php
include_once 'loginconfig.php';
if (isset($_POST['login']))
{
$userid=check_user($_POST['username'], $_POST['userpass']);
if ($userid!=false)
login($userid);
$sql = "SELECT * FROM us_blacksoul WHERE UserName='$username' AND UserPass=MD5('$userpass');";
$result = mysql_query($sql);
$data = mysql_fetch_assoc($result);
$status = $data['status'];
$_SESSION["status"];
$_SESSION["username"];
$_SESSION["UserID"];
$UserName = $_SESSION["username"];
}
if (!logged_in($username))
echo '
<form method="post" action="index.php?site=login">
<table >
<tr>
<td> <input name="username" type="text" value="User"></td>
<td> <input name="userpass" type="password" id="userpass" value="Passwort"></td>
<td><input name="login" type="submit" id="login" value="Einloggen"></td>
</tr>
</table>
</form>';
$zeit = date("Y-m-d H:i:s", time());
if ($status == 3) {
echo"<div align=\"right\">Wilkommen: <a href=\"index.php?site=admin\"><font color=\"#FF0000\">$username</font></a></div>";
session_register("status");
session_register("username");
$sql="UPDATE us_blacksoul SET time='$zeit' WHERE UserName = $username";
$resID=mysql_query($sql,$linkID);
if (!$resID) mysql_error();
}
if ($status == 2) {
session_register("status");
session_register("username");
echo"<div align=\"right\">Wilkommen: <a href=\"index.php?site=user1\"><font color=\"#FF0000\">$username</font></a></div>";
$sql="UPDATE us_blacksoul SET time='$zeit' WHERE UserName = $username";
$resID=mysql_query($sql,$linkID);
if (!$resID) mysql_error();
}
/*
//noch testen
if (!$status)
{
echo '
<form method="post" action="index.php?site=login">
<table >
<tr>
<td> <input name="username" type="text" value="User"></td>
<td> <input name="userpass" type="password" id="userpass" value="Passwort"></td>
<td><input name="login" type="submit" id="login" value="Einloggen"></td>
</tr>
</table>
</form>';
}
*/
hier die zb.: news.php in der der status wieder gefragt wird also ob er 3 ist f?r admin:
//abfrage ob admin
$status = $_SESSION["status"];
if ($status == 3) {
?>
<div align="center"><h3><b>News eintragen</b></h3></div><br><br>
<?php
////////// BlackFireDoor Beta v. 1.0.0.1 ////////////
////// Copyright (C) [2005] [Blacksoul] ///////////
////// http://blackfiredoor.com ///////////////////
$logname = $_SESSION["username"];
$datum = date("Y-m-d H:i:s");
function db_connect()
{
include("config.php");
$linkID=mysql_connect("$dbhost","$mysqlname","$dbpass");
if (!$linkID) mysql_error();
$select=mysql_select_db("$dbname");
if (!$select) mysql_error();
return $linkID;
}
function erstellen($titel,$datum,$name,$text,$linkID)
{
if (!$name) die ("<div align=\"center\">Name Fehlt.</div>");
if (!$titel) die ("<div align=\"center\">Ihr Titel Fehlt.</div>");
if (!$text) die ("<div align=\"center\">Ihr Text Fehlt.</div>");
$sql="INSERT INTO nw_blacksoul (titel,datum,name,text) VALUES ('$titel','$datum','$name','$text')";
$resID=mysql_query($sql,$linkID);
if (!$resID) mysql_error();
}
function anzeigen($logname)
{
echo"<div align=\"center\">
<form action=\"admin.php?site=news/add\" method=\"POST\">
<table >";
if(!$logname)
{
echo"
<tr>
<td valign=\"top\">Verfasser: </td>
<td> <input type=\"Text\" name=\"name\" value=\"\"><br>
</td>
</tr>";
}
else
{
echo"
<tr>
<td valign=\"top\">Verfasser: </td>
<td> <input type=\"Text\" name=\"name\" value=\"$logname\"><br>
</td>
</tr>";
}
echo"
<tr>
<td valign=\"top\">Titel: </td>
<td><input type=\"Text\" name=\"titel\" value=\"\" size=\"35\"> </td>
</tr>
<tr>
<td valign=\"top\">News: </td>
<td><textarea name=\"text\" cols=\"60\" rows=\"20\" id=\"utext\"></textarea> </td>
</tr>
<tr>
<td> </td>
<td><input type=\"Submit\" name=\"button\" value=\"Erstellen\"> </td>
</tr>
</table>
</form>
</div>";
}
function ok()
{
echo"<div align=\"center\">Ihr News wurde erfolgreich eingetragten.<br><br><a href=\"admin.php?site=news/ansicht\">Hier k?nnen Sie die News bearbeiten.</a></div>";
}
switch ($button){
case "Erstellen": erstellen($titel,$datum,$name,$text,$linkID); ok(); break;
default: anzeigen($logname);
}
}
else
{
echo"Zugriff verweigert";
}
mann kann die variablen einfach in der url leiste beim browser ver?ndern und somit den status 3 erlangen. wie kann ich das nun machen das variablen nicht in der leiste ?bergeben werden?? -
ich werds mir bei zeiten genau durch gucken und dann dir sagen wo der fehler auftritt.
hab schon etliche sachen gesehen, die sowas von verdreht sind..
kannst du mir noch bitte die datei schicken, in der du validierst zB bei der news.php ob die session von dir ist? per pn reicht aus
mfg -
man... ein scrip wie zb das hier:
/* * Session Start- und Pr?f-Include */ // TimeOut ?berschreiben auf eine Stunde ( 60*60 ) ini_set("session.gc_maxlifetime","3600"); // trans-sid aktivieren ( --enable-trans-sid erforderlich ) ini_set("session.use_trans_sid", "1"); // keine Cookies ini_set("session.use_cookies", "0"); // Session Name session_name("PHPMAG"); session_start(); $passed=true; // Ist die Session durch login erzeugt worden if ($_SESSION["VERIFIED"]) { // Ist die Abfragende IP die gleiche ? if ($_SESSION["REMOTE_ADDR"]!=$_SERVER["REMOTE_ADDR"]) { $passed=false; } // Eine Session kann nur 'legal' durch uns verlinkt worden sein, // daher muss der Referrer unseren Servernamen beinhalten if (strpos($_SERVER["HTTP_REFERER"],$_SERVER["HTTP_HOST"])===false) { $passed=false; } } else { // Neu gestartete Sessions sind per se ung?ltig $passed=false; } // Irgendwelche Checks fehlgeschlagen ? if (!$passed) { session_destroy(); die("Ung?ltige Session, Sorry..."); }
die in jede seite in der man eingelogt ist als allererstes includet wird um zu ?berpr?fen ob die session ?berhaup g?ltig ist.
EDIT:
solltest du eine solche (muss nicht zeile f?r zeile gleich sein, sondern den zweck erf?llen) datei nicht haben... das lesen:
http://de2.php.net/manual/de/ref.session.php
und das auch:
http://de2.php.net/manual/de/security.php
danach nochmal lesen und beim cms von null mit 'programmieren' anfangen!
nur so als tipp, ales andere w?rde nichts bringen
Beitrag ge?ndert am 30.11.2005 22:36 von kirschbluete -
Noch ein Kleiner tipp, der es noch sicherer macht (optional zu kirschbl?tes sachen (die au?erdem sehr empfehlenswert sind)) falls du keinen anbieter wie AOL oder ?nliche ben?tzt, die dir st?ndig eine neue IP (macht AOL soweit ich wei? bei jedem neuen seitenaufruf) geben k?nntest du der session den namen des md5 haschs deiner IP geben. Hat den vorteil das jeder der ne andere IP hat ne neue session aufmacht und somit garnicht erst auf deine session zugreifen kann...
session_name(md5($_SERVER['REMOTE_ADDR'])); session_start(); //Dein Script
-
danke theuntouchables das hat mir weitergeholfen ich werde es heute mittag mal ausprobieren.
und wie meint ihr das, dass ich von null anfangen soll .
das cms ist ansonsten gut ich muss doch nicht nochmal alles neu schreiben. -
Noch ein Kleiner tipp, der es noch sicherer macht (optional zu kirschbl?tes sachen (die au?erdem sehr empfehlenswert sind)) falls du keinen anbieter wie AOL oder ?nliche ben?tzt, die dir st?ndig eine neue IP (macht AOL soweit ich wei? bei jedem neuen seitenaufruf) geben k?nntest du der session den namen des md5 haschs deiner IP geben. Hat den vorteil das jeder der ne andere IP hat ne neue session aufmacht und somit garnicht erst auf deine session zugreifen kann...
session_name(md5($_SERVER['REMOTE_ADDR'])); session_start(); //Dein Script
Dir ist klar, dass die Sicherheit darunter extrem leidet?
Man brauch legendlich die IP von jemanden rauszufinden und das geht sehr einfach!
Also das ist das Gegenteil von sicher, aber was solls, das CMS ist von Grund auf unsicher, da wird das auch nichts n?tzen.
MfG Lucas -
lucas9991 schrieb:
Noch ein Kleiner tipp, der es noch sicherer macht (optional zu kirschbl?tes sachen (die au?erdem sehr empfehlenswert sind)) falls du keinen anbieter wie AOL oder ?nliche ben?tzt, die dir st?ndig eine neue IP (macht AOL soweit ich wei? bei jedem neuen seitenaufruf) geben k?nntest du der session den namen des md5 haschs deiner IP geben. Hat den vorteil das jeder der ne andere IP hat ne neue session aufmacht und somit garnicht erst auf deine session zugreifen kann...
session_name(md5($_SERVER['REMOTE_ADDR'])); session_start(); //Dein Script
Dir ist klar, dass die Sicherheit darunter extrem leidet?
Man brauch legendlich die IP von jemanden rauszufinden und das geht sehr einfach!
Also das ist das Gegenteil von sicher, aber was solls, das CMS ist von Grund auf unsicher, da wird das auch nichts n?tzen.
MfG Lucas
Auch wenn das stimmen mag, wie kann man (bzw. kann man ?berhaupt) eine andere IP einschleusen?
-
@lukas: Schonmal auf die idee gekommen das man seine IP nicht einfach umstellen kann???
Und selbst wenn man es per externem include machen w?rde und dort die super globals manipulieren, dann w?re das script von kirschbl?te genauso unsicher...
PS: wie willste die IP von dem, mal eben rausfinden???
An die logs von seiner DB kommste ned rann und er wird dir auch gerade seine IP sagen wenn du danach fragst...
aslo mein Tipp erst denken dann schreiben -
@lukas: Schonmal auf die idee gekommen das man seine IP nicht einfach umstellen kann???
Und selbst wenn man es per externem include machen w?rde und dort die super globals manipulieren, dann w?re das script von kirschbl?te genauso unsicher...
PS: wie willste die IP von dem, mal eben rausfinden???
An die logs von seiner DB kommste ned rann und er wird dir auch gerade seine IP sagen wenn du danach fragst...
aslo mein Tipp erst denken dann schreiben
Dir ist klar, dass man mit einem einfachen Script die IP auslesen kannst, oder?
Vieleicht solltest du mal nachdenken, wie einfach es doch geht...
Ich bitte ihn einfach auf eine Seite von mir zu gehne und schon habe ich seine IP.
Dasselbe k?nnen Webmaster von Websites machen, die Log Dateien haben. Dort wird n?mlich auch der Referer und die IP gespeichert.
F?llt einm?lig der Vorhang?
Fr?her konnte man sogar ?ber ICQ die IP herausfinden.
Zu kirschbluete :
kirschbluetes Script ist wesentlich sicherer!
Es wird n?mlich nicht versucht selber einen Session Namen zu erstellen....
Also bitte denk du einmal nach, was sicher und was nicht sicher ist.
MfG Lucas
P.S.:
Ich brauche nicht nach seiner IP zu fragen, es geht auch anders.
Mein Tipp :
Lies dir folgendes Buch mal durch :
Kevin Mitnick - Die Kunst Der T?uschung
Das ist auch als PDF zu haben.
edit :
@cd :
Seine IP kann man zwar ver?ndern. Aber man kann keine Wunschadressen benutzen.
Kleiner Nachtrag :
Was ist mit den Leuten, die ?ber einen Proxy oder ?ber einen Router ins Internet gehen?
Proxys schicken zwar h?ufig die IP mit, aber nicht immer. Wenn ?berhaupt, dann steht sie nicht in der Variable die in dem Script vorkommt.
Beitrag ge?ndert am 1.12.2005 14:42 von lucas9991 -
Ich hab mir das Script 5 Sekunden angesehen:
Du kannst doch nicht einfach $status == 3 als Admin-?berpr?fung benutzen, wenn man $status einfach per GET ?bergeben kann! Bist du des Wahnsinns? Junge Junge -
genau aber wie w?rdest du es machen das ist es ja man kann den status bis jetzt manipolieren
-
man wie w?r es wenn du den status frisch aus der datenbank holst?
bei der session ?berpr?fung (siehe mein script) zus?tzlich frisch in die sessionvariable status speichern
so:
$_SESSION['status'] = $row['status'];
und greif verdammtnoch mal per $_SESSION['status'] bei der abfrage zu:
if ($_SESSION['status'] == 3) //stat: if ($status == 3) { //admin }
man junge wenn du nicht richtig verstehst wie die sichbarkeitsr?ume von variablen fubktionieren wirst du wirklich von null anfangen m?ssen, denn alles andere w?re nicht tragbar. wenn dein cms so schlampig mit variablen umgeht, dann sicherlich nicht nur in den news!!
les dir die links durch die ich dir gepostet habe (bitte) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage