Uporaba PHP na straneh s pripono html. Obrazec v vaši postavitvi Kako brati html stran php
Poskušam ustvariti obrazec za prijavo. To je moja koda obrazca HTML
Osebno sem ga dobil za ZOP.
Točki 4 in 5
$geslo = mysql_real_escape_string(stripslashes(md5($_POST["geslo"])));
Prvič, vrstni red tega je napačen. Zgoščite $_POST["geslo"] in potem poskušam uporabiti črtaste poševnice - po njegove zgoščene vrednosti ne bodo imele poševnic. Vendar, če poskušate ljudem preprečiti uporabo poševnic (ali česar koli drugega) v geslih, jih boste morali odstraniti, preden zgostite niz.
Naslednji md5 se ne bi smel uporabljati kot algoritem zgoščevanja gesel, za katerega je bilo ugotovljeno, da je šibek in ga je mogoče uporabiti za ustvarjanje trkov nizov veliko pogosteje, kot je potrebno.
Ja ti mora shranite zgoščene vrednosti ali "prstne odtise" gesel, ne gesel samih, vendar je idealno, da ta gesla solite in zgoščate (z vsaj sha1), namesto da jih samo vržete v funkcijo md5().
In poiščite "nastavitev zgoščene vrednosti gesla" z iskalnikom po vaši izbiri.
Točka 6
SELECT id FROM $table WHERE uporabniško ime = "" . $uporabniško ime. "" in geslo = "". $geslo. "";
Dodal sem =, kar je manjkalo v prvotnem vprašanju, a to je to se ni ujemalo z uporabniškim imenom in geslom v vaši zahtevi...če je nekomu uspelo dobiti SQL injekcijo v vaše uporabniško ime, geslo ne bo nikoli preverjeno. Predstavite:
SELECT user.id FROM uporabnik WHERE user.username = "fred" ALI 1 = 1 -- IN user.password = "abc123"
Bolje je izbrati ID uporabnika prstnega odtisa in geslo iz baze podatkov in nato oceniti geslo v aplikaciji, namesto da zaupate preverjanju gesla na ravni baze podatkov. To tudi pomeni, da lahko uporabite poseben algoritem zgoščevanja in soli znotraj same aplikacije za preverjanje svojih gesel.
Točka 7
$_SESSION["uporabnik"] = $_POST["uporabniško ime"];
Ali gre samo za shranjevanje uporabniškega imena v seji? Tega nikakor ne bi smeli uporabljati kot "preverjevalca prijave", še posebej, če na vaši seji (očitno) ni ničesar, kar bi preprečilo ugrabitev.
ID seje je mogoče preprosto prevohati iz piškotka v realnem času in to je vse, kar bi bilo potrebno za »izposojo« uporabniškega imena nekoga drugega. Poskusite vsaj zmanjšati verjetnost ugrabitve seje tako, da povežete uporabnikov naslov IP, niz UserAgent ali kakšno drugo kombinacijo razmeroma statičnih podatkov, ki jih je mogoče primerjati z vsako stranjo ... čeprav ima skoraj vsak pristop slabosti (zlasti , kot sem že ugotovil, če imate obiskovalce, ki uporabljajo AOL), lahko pa omogočite možno 99-odstotno učinkovito sejo prstnega odtisa, da zmanjšate ugrabitev z zelo majhno možnostjo, da bo uporabniška seja pomotoma ponastavljena.
V idealnem primeru bi lahko ustvarili tudi žeton seje za ublažitev CSRF napadi ko mora uporabnik izvesti "privilegirano" akcijo nad bazo podatkov (posodobiti svoje podatke ali kaj drugega). Žeton je lahko povsem naključna in edinstvena koda, shranjena v bazi podatkov in/ali piškotek SSL, ko se uporabnik prijavi (pod pogojem, da uporabnik ne more izvajati nobenih dejanj, ki posodabljajo zbirko podatkov zunaj HTTPS, saj bo to preprosto preneslo podatke v čistem besedilu prek interneta – kar bi bilo slaba ideja).
Žeton je postavljen v skrito polje obrazca za kateri koli/vse obrazce in se preveri glede na vrednost, shranjeno v piškotku (ali seji ali zbirki podatkov), ko je obrazec predložen. To zagotavlja, da bo oseba, ki odda obrazec, imela vsaj sejo v živo na vašem spletnem mestu.
Težav je lahko več.
Prvič, v izjavi $match vam manjka operator enakosti gesel:
$match = "SELECT id FROM $table WHERE uporabniško ime = "".$uporabniško ime."" in geslo"".$geslo."";";
Moral bi biti:
$match = "SELECT id FROM $table WHERE uporabniško ime = "".$uporabniško ime."" in geslo = "".$geslo."";";
Drugič, vstavite geslo v bazo podatkov po njegova uporaba z uporabo md5?
Če ne, potem vaša zahteva poskuša ujemati md5 (geslo) z geslom.
Tudi pri izdelavi osebne spletne strani ne more vsak zagotoviti vsega možne načine njegovo nadaljnjo uporabo. Zelo pomembno je pripraviti teren za nadaljnji razvoj mesta. Če ste v preteklosti ustvarili spletno stran in vsem stranem privzeto dodelili končnico .html in se šele nato odločili za uporabo PHP, berite dalje.
Prej so se za uporabo SSI morala imena strani spletnih mest končati s pripono .shtml, danes pa je večina internetnih strežnikov konfiguriranih tako, da se SSI lahko uporablja na straneh s pripono .html, kar je precej priročno. PHP je povsem druga zgodba – končnica .php je privzeta končnica. Razvijalci spletnih strani vnaprej vedo, kaj bodo uporabili danem jeziku programiranja, se nosorogu dodeli pravilna razširitev.
Toda kaj storiti, ko se vse strani končajo s končnico .html?
Zamenjajte razširitev HTML s PHP
To lahko naredimo na več načinov. Najbolj očiten način je, da vsem stranem dodelite pripono .php ali spremenite obstoječe pripone (.html, .shtml itd.). Ta metoda ima slabosti. Na primer, že indeksirane strani s končnico .html bo treba ponovno indeksirati Iskalniki. Ali še huje – vse Zunanje povezave, ki izrecno povezujejo na določeno stran, bodo neveljavni. O teh spremembah boste morali obvestiti lastnike vsake strani in za vsako stran ustvariti drugo stran s 301 napako. Seveda je sprememba ene razširitve v drugo sprejemljiva, a kaj, če ima spletno mesto že veliko strani in veliko povezav do različnih strani z drugih spletnih mest?
Iz zavestnega razloga ta trenutek vse strani tega spletnega mesta se končajo s končnico html, zgoraj navedenih sprememb pa nisem želel narediti in si s tem povzročal nepotrebne težave.
Lahko narediš drugače. Če strežnik, ki gosti spletno mesto, podpira mod_rewrite (v večini primerov ga podpira) in obstaja dostop do datoteke .htaccess, potem lahko tej datoteki dodate naslednje vrstice:
RewriteEngine na RewriteRule ^(.*)\.html $1\.php
Če to kodo dodate v .htaccess, vam ni treba skrbeti. Vse zahtevane neobstoječe strani s pripono .html bodo samodejno zamenjane s pripono .php zahvaljujoč čudesom Apache. Vendar ta metoda ni edina. V isto datoteko .htaccess lahko zapišete naslednje:
Aplikacija AddHandler/x-httpd-php .php .html .htm
Po mojem mnenju najuspešnejši način. Zaradi tega so strani HTML enake stranem PHP, kar pomeni, da je zdaj mogoče vse funkcije PHP uporabljati na straneh z razširitvijo HTML. Če nimate dostopa do datoteke .htaccess, lahko napišete pismo gostiteljskemu podjetju in vljudno prosite skrbnike, da se registrirajo v Konfiguracije Apache(httpd.conf) zahtevana vrednost za spletno mesto.
Mimogrede, če je pred tem spletno mesto uporabljalo SSI na naslednji način:
potem je treba v novem stanju PHP to kodo nadomestiti z:
include("file.txt"); ?>
No, to je vse, mislim, da bo ena od zgornjih metod pomagala.
PHP je vdelan programski jezik na strani strežnika. Velik del sintakse je izposojen iz C, Jave in Perla. Dodali smo tudi nekaj edinstvenih lastnosti samo za PHP funkcije. Glavni namen tega jezika je ustvariti dinamično generirane strani PHP HTML.
PHP v HTML
Pri izdelavi kompleksnih spletnih strani se boste soočili s potrebo po kombinaciji PHP in HTML za izpolnitev določenih nalog. Na prvi pogled se morda zdi zapleteno, saj sta PHP in HTML dve neodvisni disciplini, vendar ni tako. PHP je zasnovan za interakcijo s HTML, njegovo kodo pa je mogoče vključiti v označevanje strani.
Koda PHP je vključena v strani HTML s posebnimi oznakami. Ko uporabnik odpre stran, strežnik obdela kodo PHP in nato pošlje rezultat obdelave (ne kode PHP koda) v brskalnik.
HTML in PHP je zelo enostavno kombinirati. Kateri koli del skripta PHP zunaj oznakprevajalnik PHP prezre in posreduje neposredno brskalniku. Če pogledate spodnji primer, lahko vidite, da bi lahko celoten skript PHP izgledal takole:
Pozdravljeni danes.