Forum » Izdelava spletišč » header() in setcookie() nehala delovati ?!
header() in setcookie() nehala delovati ?!
galu ::
Pred kakšnim letom sem napisal eno kratko aplikacijo, in je delala BP do izpred nekaj mesecev, ko sta mi "odpovedali" omenjeni funkciji. Napako sem opazil komaj zdaj, ker se mi je prej ni dalo popravljati/ni bilo potrebe.
Kakorkoli, header() funkcija mi v obstoječih fajlih več ne dela. Dela pa v praznem .php fajlu, v katerem je samo ta funkcija. Si mislim okej, bom pač dal echoal en javascript redirect, problem rešen. Za tem naletim na hujši problem - funkcija setcookie() več ne ustvarja piškotkov.
Tudi če ustvarim cookie v prazni PHP datoteki, mi echo $_COOKIE["isertcookienamehere"] ali print_r($_COOKIE) vrneta... Praznino.
Še enkrat, ta skripta je več mesecev delovala brezhibno, nakar je enkrat zaradi meni neznanega razloga nehala delovati. Da bi ti dve funkciji bili odstranjeni iz zadnje verzije PHP-ja dvomim (in ne najdem dokazov za to), zato pripisujem krivdo serverju (what else is there?). Ticket je odprt, ampak še vseeno raje vprašam tukaj.
Kakorkoli, header() funkcija mi v obstoječih fajlih več ne dela. Dela pa v praznem .php fajlu, v katerem je samo ta funkcija. Si mislim okej, bom pač dal echoal en javascript redirect, problem rešen. Za tem naletim na hujši problem - funkcija setcookie() več ne ustvarja piškotkov.
Tudi če ustvarim cookie v prazni PHP datoteki, mi echo $_COOKIE["isertcookienamehere"] ali print_r($_COOKIE) vrneta... Praznino.
Še enkrat, ta skripta je več mesecev delovala brezhibno, nakar je enkrat zaradi meni neznanega razloga nehala delovati. Da bi ti dve funkciji bili odstranjeni iz zadnje verzije PHP-ja dvomim (in ne najdem dokazov za to), zato pripisujem krivdo serverju (what else is there?). Ticket je odprt, ampak še vseeno raje vprašam tukaj.
Tako to gre.
Ziga Dolhar ::
Se opravičujem za bedno vprašanje (na nivoju "ste že poskusili restartati router?"), pa vednar: prikaz errorjev (vseh) imaš vklopljen?
https://dolhar.si/
galu ::
V php.ini?
Naj bi imel, bom še pa vseeno enkrat preveril.
update: ja, mam.
Naj bi imel, bom še pa vseeno enkrat preveril.
update: ja, mam.
Tako to gre.
Zgodovina sprememb…
- spremenil: galu ()
Bob Rock ::
Da dam se jaz bedno vprasanje =)
Lokalno ti koda dela?
Lokalno ti koda dela?
___________________________________________________
gance hale ale cuzamen
gance hale ale cuzamen
fiction ::
Nimam pojma o PHP, ampak http://php.net/manual/en/function.heade... pravi:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.Si siguren, da ni kaj takega? Mogoče je kak nov presledek kje.
galu ::
@Bob Rock
Ja, lokalno dela.
@fiction
To sem že tudi gledal, in naj nebi bil problem pri meni (no, predzadnji echo bi lahko bil problem, ampak razlike ni niti po odstranitvi le-tega).
Dodajam še kodo ene datoteke (header() že zamenjan z alternativo):
Ja, lokalno dela.
@fiction
To sem že tudi gledal, in naj nebi bil problem pri meni (no, predzadnji echo bi lahko bil problem, ampak razlike ni niti po odstranitvi le-tega).
Dodajam še kodo ene datoteke (header() že zamenjan z alternativo):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Prijava</title> <?php $con = mysql_connect("i","like","cookiez...."); mysql_select_db('....NOT', $con); if (isset($_COOKIE['username']) AND isset($_COOKIE['password'])) { $username = $_COOKIE['username']; $password = $_COOKIE['password']; } else if ($_POST['username'] AND $_POST['password']) { $username = (string)$_POST['username']; $password = (string)md5($_POST['password']); } else { echo "<script> window.location.replace('index.php') </script>"; } // ---FUNC--- for getting CLIENT IP function get_ip() { if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "UNKNOWN"; return $ip; }; $query = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'"); if (mysql_num_rows($query) == 0) { echo "<script> window.location.replace('index.php') </script>"; } else { while ($row = mysql_fetch_array($query)) { if (isset($_COOKIE['username']) == False/* število stoplcev v mySQL * 2 */) { setcookie('username', $row['username'], time()+60*60*24); setcookie('password', $row['password'], time()+60*60*24); } echo 'Prijava uspešna za "' . $row['username'] . '"' . ' ..... preusmerjanje!'; }; $current_ip = get_ip(); mysql_query("UPDATE users SET ip = CONCAT(ip,' $current_ip ||') WHERE username = '$username' AND password = '$password'"); /* echo "<script> window.location.replace('accountant.php') </script>"; */ } print_r($_COOKIE); // test code ?>
Tako to gre.
Zgodovina sprememb…
- spremenil: galu ()
fiction ::
Uhm pa tole sigurno ni kak contest "maksimalno število bugov na vrstic kode" or sth?
Vrednost cookijev, HTTP_X_FORWARDED_FOR headerja, POST parametrov... in najbrž še česa je user-controlled. Tudi če odmislimo to, da MD5 ni collision-resistant, verjetno hočeš crypt(), ker je temu namenjen...
setcookie() definitivno kličeš za tem, ko si že izpisal title pa meta (in verjetno bi tudi header()).
Vrednost cookijev, HTTP_X_FORWARDED_FOR headerja, POST parametrov... in najbrž še česa je user-controlled. Tudi če odmislimo to, da MD5 ni collision-resistant, verjetno hočeš crypt(), ker je temu namenjen...
setcookie() definitivno kličeš za tem, ko si že izpisal title pa meta (in verjetno bi tudi header()).
drola ::
Na hitro, v tej kodi sta vsaj 2 ogromni varnostni luknji:
1. Prijava je možna že samo s poznavanjem zgoščenega gesla, napadalec sploh ne rabi priti do originala.
2. Koda je ranljiva na MySQL injection
Potem je pa še en kup odsvetovanih praks:
1. mysql_* funkcije so deprecated. Uporabi mysqli ali PDO.
2.
3. Preverjanje HTTP_X_FORWARDED_FOR pri pridobivanju IPja ima smisel, če je proxy med internetom in PHP strežnikom, ne pa če je proxy med lokalnim omrežjem klienta in internetom.
4. if(isset($_COOKIE['username']) == False) --> lepše je if(!isset($_COOKIE['username']))
5. Kot že omenjeno, md5 se ne uporablja več
6. Gesla je treba soliti
7. Za take namene se uporablja seje
8. Ne piši login sistema iz ničle, če si začetnik. Uporabi kak framework
9. Uči se po tutorialih napisanih od 2011 naprej.
1. Prijava je možna že samo s poznavanjem zgoščenega gesla, napadalec sploh ne rabi priti do originala.
2. Koda je ranljiva na MySQL injection
Potem je pa še en kup odsvetovanih praks:
1. mysql_* funkcije so deprecated. Uporabi mysqli ali PDO.
2.
$username = (string)$_POST['username']; $password = (string)md5($_POST['password']);- tole si zasluži double facepalm
3. Preverjanje HTTP_X_FORWARDED_FOR pri pridobivanju IPja ima smisel, če je proxy med internetom in PHP strežnikom, ne pa če je proxy med lokalnim omrežjem klienta in internetom.
4. if(isset($_COOKIE['username']) == False) --> lepše je if(!isset($_COOKIE['username']))
5. Kot že omenjeno, md5 se ne uporablja več
6. Gesla je treba soliti
7. Za take namene se uporablja seje
8. Ne piši login sistema iz ničle, če si začetnik. Uporabi kak framework
9. Uči se po tutorialih napisanih od 2011 naprej.
https://drola.si
galu ::
Morda niste dojeli, ampak program uporabljam zgolj jaz, zato je varnost praktično... Ničnega pomena, saj so tudi podatki... Nepomembni. Koda je stara, celotna "aplikacija" pa spisana na brzino, zato pač je kakšna je (in ne vidim smisla je updejtati).
p.s. Se posipam s pepelom - kriva sta bila meta in title taga. Ju sploh ni sem registriral, ker mi je notepad++ iz neznanega razloga preskočil prve 3 vrstice v fajlu...
Kakorkoli, zdaj je rešeno.
Čeprav, zakaj je delovalo pol leta bp mi ni jasno...
Hvala
p.s. Se posipam s pepelom - kriva sta bila meta in title taga. Ju sploh ni sem registriral, ker mi je notepad++ iz neznanega razloga preskočil prve 3 vrstice v fajlu...
Kakorkoli, zdaj je rešeno.
Čeprav, zakaj je delovalo pol leta bp mi ni jasno...
Hvala
Tako to gre.
Zgodovina sprememb…
- spremenil: galu ()
kr?en ::
Se nekaj za tko by the way glede zascite in za kaj je fino treba poskrbet: https://www.owasp.org/index.php/Top_10_...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | problem z phpjemOddelek: Izdelava spletišč | 4252 (3665) | snow |
» | phpOddelek: Izdelava spletišč | 1098 (1022) | Trubadur |
» | phpNuke problem s cookijiOddelek: Izdelava spletišč | 1275 (1207) | the_unborn |
» | oop+php+sessionsOddelek: Izdelava spletišč | 2586 (53) | cahahopie |
» | pa še 2 PHP problema ... (strani: 1 2 )Oddelek: Programiranje | 2985 (2534) | rasta |