Bruker PHP på sider med html-utvidelsen. Skjema i layouten din Slik leser du html-side php
Jeg prøver å lage et påloggingsskjema. Dette er HTML-skjemakoden min
Personlig fikk jeg den for PUD.
Punkt 4 og 5
$password = mysql_real_escape_string(stripslashes(md5($_POST["passord"])));
For det første er rekkefølgen på dette feil. Du hash $_POST["passord"] og deretter prøver å bruke skråstreker - etter dens hashes vil ikke ha noen skråstreker. Men hvis du prøver å hindre folk i å bruke skråstreker (eller noe annet) i passord, må du fjerne dem før du hash strengen.
Følgende md5 bør ikke brukes som en passordhashingalgoritme, som har vist seg å være svak og kan være brute force for å lage strengkollisjoner mye oftere enn nødvendig.
Ja du må lagre hasher eller "fingeravtrykk" av passord, ikke selve passordene, men ideelt sett vil du salte og hash (med minst sha1) disse passordene, i stedet for bare å kaste dem inn i md5()-funksjonen.
Og søk etter "passordhash-innstilling" ved å bruke søkemotoren du ønsker.
Punkt 6
VELG ID FRA $table WHERE brukernavn = "" . $brukernavn. "" og passord = "" . $password. "";
Jeg la til = som manglet fra det opprinnelige spørsmålet, men det er det samsvarte ikke med brukernavnet og passordet i forespørselen din...hvis noen klarte å få en SQL-injeksjon i brukernavnet ditt, vil passordet aldri bli bekreftet. Introdusere:
VELG bruker.id FRA bruker HVOR bruker.brukernavn = "fred" ELLER 1 = 1 -- OG bruker.passord = "abc123"
Det er bedre å velge fingeravtrykksbruker-ID og passord fra databasen og deretter evaluere passordet i applikasjonen i stedet for å stole på passordverifiseringen på databasenivå. Dette betyr også at du kan bruke en spesiell hash- og saltingalgoritme i selve appen for å bekrefte passordene dine.
Punkt 7
$_SESSION["bruker"] = $_POST["brukernavn"];
Er det bare å lagre brukernavnet i økten? Dette bør ikke brukes som en "påloggingsverifikator" på noen måte, spesielt hvis det (tilsynelatende) ikke er noe på økten din som forhindrer kapring.
Sesjons-IDen kan enkelt snus fra informasjonskapselen i sanntid, og det er alt som kreves for å "låne" andres brukernavn. Du bør i det minste prøve å redusere sannsynligheten for øktkapring ved å assosiere brukerens IP-adresse, UserAgent-streng eller en annen kombinasjon av relativt statiske data som kan sammenlignes med hver side... det er imidlertid ulemper med nesten enhver tilnærming (spesielt , som jeg allerede har funnet, hvis du har besøkende som bruker AOL), men du kan gjøre en mulig 99 % effektiv fingeravtrykksøkt mulig for å redusere kapring med en veldig liten sjanse for at brukerens økt vil bli tilbakestilt ved en feiltakelse.
Ideelt sett kan du også lage et økttoken for å redusere CSRF-angrep når brukeren trenger å utføre en "privilegert" handling på databasen (oppdatere sine data eller noe annet). Tokenet kan være en helt tilfeldig og unik kode lagret i en database og/eller kjeks SSL når brukeren logger på (forutsatt at brukeren ikke kan utføre noen handlinger som oppdaterer databasen utenfor HTTPS, da dette ganske enkelt vil overføre dataene i klartekst over Internett - som vil være dårlig ide).
Tokenet plasseres i et skjult skjemafelt for alle/alle skjemaer og kontrolleres mot verdien som er lagret i informasjonskapselen (eller økten eller databasen) når skjemaet sendes inn. Dette sikrer at personen som sender inn skjemaet i det minste vil ha en live-økt på nettstedet ditt.
Det kan være flere problemer.
For det første, i $match-setningen din mangler du passordlikestillingsoperatoren:
$match = "VELG ID FRA $table WHERE brukernavn = "".$brukernavn."" og passord"".$password."";";
Bør være:
$match = "VELG ID FRA $table WHERE brukernavn = "".$brukernavn."" og passord = "".$passord."";";
for det andre, setter du inn passordet i databasen etter dens bruk med md5?
Hvis ikke, prøver forespørselen din å matche md5 (passord) med passordet.
Når du oppretter selv et personlig nettsted, kan ikke alle sørge for alt mulige måter dens videre bruk. Det er svært viktig å forberede grunnen for videre utvikling av området. Hvis du har opprettet et nettsted tidligere og tildelt alle sidene .html-utvidelsen som standard, og først da bestemte deg for å bruke PHP, så les videre.
Tidligere, for å bruke SSI, måtte nettstedssidenavn slutte med .shtml-utvidelsen, men i dag er de fleste Internett-servere konfigurert slik at SSI kan brukes på sider med .html-utvidelsen, noe som er ganske praktisk. PHP er en helt annen historie - .php-utvidelsen er standardutvidelsen. Nettstedutviklere vet på forhånd hva som skal brukes gitt språk programmering, er rhinestone tildelt riktig forlengelse.
Men hva skal jeg gjøre når alle sider slutter med .html-utvidelsen?
Erstatt HTML-utvidelsen med PHP
Dette kan gjøres på flere måter. Den mest åpenbare måten er å gi alle sider en .php-utvidelse eller endre eksisterende utvidelser (.html, .shtml, etc.). Denne metoden har ulemper. For eksempel vil allerede indekserte sider med .html-utvidelsen måtte indekseres på nytt søkemotorer. Eller enda verre - alt Eksterne linker, som eksplisitt lenker til en bestemt side vil være ugyldig. Og du må varsle eierne av hvert nettsted om disse endringene og opprette en ny side med 301-feil for hver side. Selvfølgelig er det akseptabelt å endre en utvidelse til en annen, men hva om nettstedet allerede har mange sider og mange linker til forskjellige sider fra andre nettsteder?
Av en bevisst grunn dette øyeblikket alle sidene på dette nettstedet slutter med html-utvidelsen, og jeg ønsket ikke å gjøre endringene ovenfor, og dermed skape unødvendige vanskeligheter for meg selv.
Du kan gjøre det på en annen måte. Hvis serveren som er vert for nettstedet støtter mod_rewrite (i de fleste tilfeller gjør den det), og det er tilgang til .htaccess-filen, kan du legge til følgende linjer i denne filen:
RewriteEngine på RewriteRule ^(.*)\.html $1\.php
Ved å legge til denne koden i .htaccess trenger du ikke å bekymre deg. Alle forespurte ikke-eksisterende sider med en .html-utvidelse vil automatisk erstattes med en .php-utvidelse takket være Apaches underverker. Men denne metoden er ikke den eneste. Du kan skrive følgende i den samme .htaccess-filen:
AddHandler application/x-httpd-php .php .html .htm
Etter min mening den mest vellykkede måten. Dette gjør HTML-sider lik PHP-sider, noe som betyr at alle PHP-funksjoner nå kan brukes på sider med HTML-utvidelse. Hvis du ikke har tilgang til .htaccess-filen, kan du skrive et brev til vertsselskapet og høflig be administratorene om å registrere seg i Apache-konfigurasjoner(httpd.conf) den nødvendige verdien for nettstedet.
Forresten, hvis siden før dette brukte SSI som følger:
så i den nye PHP-tilstanden må denne koden erstattes med:
include("file.txt"); ?>
Vel, det er alt, jeg tror en av metodene ovenfor vil hjelpe.
PHP er et innebygd programmeringsspråk på serversiden. Mye av syntaksen er lånt fra C, Java og Perl. Og også lagt til et par unike egenskaper kun for PHP-funksjoner. Hovedformålet med dette språket er å lage dynamisk genererte PHP HTML-sider.
PHP til HTML
Når du lager komplekse nettsider, vil du bli møtt med behovet for å kombinere PHP og HTML for å utføre spesifikke oppgaver. Ved første øyekast kan dette virke komplisert, siden PHP og HTML er to uavhengige disipliner, men det er ikke slik. PHP er designet for å samhandle med HTML, og koden kan inkluderes i sidemarkering.
PHP-kode er inkludert i HTML-sider ved hjelp av spesielle tagger. Når en bruker åpner en side, behandler serveren PHP-koden og sender deretter resultatet av behandlingen (ikke PHP-kode) til nettleseren.
HTML og PHP er ganske enkle å kombinere. Enhver del av et PHP-skript utenfor taggerignoreres av PHP-kompilatoren og sendes direkte til nettleseren. Hvis du ser på eksemplet nedenfor, kan du se at et komplett PHP-skript kan se slik ut:
Hei i dag.