NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Zabezpečení PHP

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
hypnozc
Člen
Avatar
hypnozc:17.9.2015 15:55

Ahoj, mam takovy problem ohledne php skriptu... Mam AJAXvou funkci, ktera si vola soubor.php, ktery vraci heslo. Vse funguje jak ma, ale problem je v tom, ze kdyz zadam URL: domena.cz/php/sou­bor.php, tak mi to vypise heslo... Nevite, jak nastavit, aby tento php soubor nesel otevrit z URL? Predem dekuji za odpoved :)

Odpovědět
17.9.2015 15:55
Schopný programátor si štěrbinu vždy najde...
Avatar
Patrik Valkovič:17.9.2015 15:56

Pokud se k němu chceš dostat skrz AJAX, tak přímo do scriptu musíš dát ochranu. Nemůžeš ho přesunout, protože potom by se k němu nedostal AJAXový dotaz.

Editováno 17.9.2015 15:58
Nahoru Odpovědět
17.9.2015 15:56
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
hypnozc
Člen
Avatar
Odpovídá na Patrik Valkovič
hypnozc:17.9.2015 15:58

aha, takze ajaxem posilat nejakou promennou (moje heslo) a v php udelat podminku if(heslo=mojeheslo) rpoved php kod? Neda se jen udelat, aby neslo primo pristupovat do slozky php, ale pres ajax to pude?

Editováno 17.9.2015 16:01
Nahoru Odpovědět
17.9.2015 15:58
Schopný programátor si štěrbinu vždy najde...
Avatar
hypnozc
Člen
Avatar
Odpovídá na Patrik Valkovič
hypnozc:17.9.2015 16:03

A pomoci .htaccess by to neslo?

Nahoru Odpovědět
17.9.2015 16:03
Schopný programátor si štěrbinu vždy najde...
Avatar
Odpovídá na hypnozc
Patrik Valkovič:17.9.2015 16:14

Možná by to šlo, ale není to nejlepší řešení. Kdokoliv ti z venku může zfalšovat dotaz a stejně se ti tam dostane. Jakmile se dotazuješ AJAXem, jde to z venku -> URL musí být veřejně přístupná, jinak to prostě nejde.
Ověřování y mělo probíhat na serveru, rozhodně bys neměl posílat (ať už AJAXem nebo GET) heslo. Koneckonců, pokud se bavíme o heslu uživatele, vůbec bys ho neměl znát. Mělo by být zaheshované. Kdyby se ti někdo na server dostal, ať nezíská data, ale pouze hashe.

Nahoru Odpovědět
17.9.2015 16:14
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na hypnozc
Patrik Smělý:17.9.2015 17:12

Ahoj, já používám toto, asi to není nic neprolomitelného, ale běžný uživatel se k tomu přes normální cestu nedostane.

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

    //Jedná se o ajax

} else {
    //Nejedná se o ajax.
}
Editováno 17.9.2015 17:12
 
Nahoru Odpovědět
17.9.2015 17:12
Avatar
Odpovídá na Patrik Smělý
Patrik Valkovič:17.9.2015 17:47

Tady jde o to, že kdokoliv ti může v hlavičce dotazu změnit nebo připsat HTTP_X_REQUES­TED_WITH a informace získá. Pokud se zobrazí citlivé údaje, je ti jedno, že je uživatel nedostane. Uživateli je můžeš vypsat na obrazovku a nic s nima neudělá. Ten kdo je bude chtít, si cestu najde. Proto můj předchozí příspěvek - citlivé informace by vůbec neměli vycházet ven.

Nahoru Odpovědět
17.9.2015 17:47
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Patrik Valkovič
Patrik Smělý:17.9.2015 18:33

Ano s tím souhlasím, já jsem pouze odpovídal na

Nevite, jak nastavit, aby tento php soubor nesel otevřít z URL?

To co jsem napsal omezí běžnému uživateli zadat URL a dostat zmíněné "heslo". Dokonce jsem to psal.

asi to není nic neprolomitelného, ale běžný uživatel se k tomu přes normální cestu nedostane.

Editováno 17.9.2015 18:33
 
Nahoru Odpovědět
17.9.2015 18:33
Avatar
hypnozc
Člen
Avatar
Odpovídá na Patrik Smělý
hypnozc:17.9.2015 19:57
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

    //Jedná se o ajax

}

svuj php kod vlozim do teto podminky a je to vse?

Nahoru Odpovědět
17.9.2015 19:57
Schopný programátor si štěrbinu vždy najde...
Avatar
hypnozc
Člen
Avatar
Odpovídá na Patrik Valkovič
hypnozc:17.9.2015 19:59

Uz chapu jak to myslis... Abych heslo overil v tom php a vracel jen true nebo false, ze?

Nahoru Odpovědět
17.9.2015 19:59
Schopný programátor si štěrbinu vždy najde...
Avatar
Odpovídá na hypnozc
Patrik Valkovič:17.9.2015 20:18

Ano, hesla v žádném případě (a jakékoliv jiné citlivé informace - adresy, bankovní účty, atd.) nemůžeš posílat ven. Ani kdybys měl SSL, tak nic z toho neposílej.
A jak jsem taky řekl. Hesla bys k dispozici mít také neměl. U uživatele ho zahashuj (i kdyby jen md5) a pošli tento otisk. Na serveru budeš mít uložené otisky hesel. Tak se to řeší klasicky.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17.9.2015 20:18
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.