Använder PHP på sidor med html-tillägget. Formulär i din layout Hur man läser html-sida php
Jag försöker skapa ett inloggningsformulär. Detta är min HTML-formulärkod
Personligen fick jag den för PDO.
Punkterna 4 och 5
$password = mysql_real_escape_string(stripslashes(md5($_POST["lösenord"])));
För det första är ordningen på detta fel. Du hash $_POST["lösenord"] och sedan försöker använda snedstreck - efter dess hash kommer inte att ha några snedstreck. Men om du försöker hindra människor från att använda snedstreck (eller något annat) i lösenord, måste du ta bort dem innan du hasha strängen.
Följande md5 bör inte användas som en hashningsalgoritm för lösenord, som har visat sig vara svag och kan vara brute force för att skapa strängkollisioner mycket oftare än nödvändigt.
Ja du måste lagra hash eller "fingeravtryck" av lösenord, inte själva lösenorden, men helst vill du salta och hasha (med minst sha1) dessa lösenord, snarare än att bara kasta dem i md5()-funktionen.
Och sök efter "lösenordshash-inställning" med hjälp av din sökmotor.
Punkt 6
VÄLJ ID FRÅN $table WHERE användarnamn = "" . $användarnamn. "" och lösenord = "" . $lösenord. "";
Jag lade till = som saknades i den ursprungliga frågan, men det är allt matchade inte användarnamnet och lösenordet i din begäran...om någon lyckades få en SQL-injektion i ditt användarnamn, kommer lösenordet aldrig att verifieras. Införa:
VÄLJ user.id FRÅN användare WHERE user.username = "fred" ELLER 1 = 1 -- OCH user.password = "abc123"
Det är bättre att välja fingeravtrycksanvändar-ID och lösenord från databasen och sedan utvärdera lösenordet i programmet snarare än att lita på lösenordsverifieringen på databasnivå. Detta innebär också att du kan använda en speciell hash- och saltningsalgoritm i själva appen för att verifiera dina lösenord.
Punkt 7
$_SESSION["användare"] = $_POST["användarnamn"];
Lagrar det bara användarnamnet i sessionen? Detta bör inte användas som en "inloggningsverifierare" på något sätt, speciellt om det (tydligen) inte finns något på din session som förhindrar kapning.
Sessions-ID:t kan enkelt sniffas från kakan i realtid, och det är allt som skulle krävas för att "låna" någon annans användarnamn. Du bör åtminstone försöka minska sannolikheten för sessionskapning genom att associera användarens IP-adress, UserAgent-sträng eller någon annan kombination av relativt statisk data som kan jämföras med varje sida... det finns dock nackdelar med nästan alla metoder (särskilt , som jag redan har funnit, om du har besökare som använder AOL), men du kan göra en möjlig 99 % effektiv fingeravtryckssession möjlig för att minska kapningen med en mycket liten chans att användarens session kommer att återställas av misstag.
Helst kan du också skapa en sessionstoken för att mildra CSRF attacker när användaren behöver utföra en "privilegierad" åtgärd på databasen (uppdatera sin data eller något annat). Token kan vara en helt slumpmässig och unik kod som lagras i en databas och/eller kaka SSL när användaren loggar in (förutsatt att användaren inte kan utföra några åtgärder som uppdaterar databasen utanför HTTPS, eftersom detta helt enkelt kommer att överföra data i klartext över Internet - vilket skulle vara dålig idé).
Tokenen placeras i ett dolt formulärfält för alla formulär och kontrolleras mot värdet som lagras i cookien (eller sessionen eller databasen) när formuläret skickas. Detta säkerställer att personen som skickar formuläret åtminstone kommer att ha en livesession på din webbplats.
Det kan finnas flera problem.
För det första, i ditt $match-uttalande saknar du lösenordslikhetsoperatorn:
$match = "VÄLJ ID FRÅN $table WHERE användarnamn = "".$användarnamn."" och lösenord"".$password."";";
Borde vara:
$match = "VÄLJ ID FRÅN $table WHERE användarnamn = "".$användarnamn."" och lösenord = "".$password."";";
För det andra, sätter du in lösenordet i databasen efter dess användning med md5?
Om inte, försöker din begäran matcha md5 (lösenord) med lösenordet.
När du skapar ens en personlig webbplats kan inte alla tillhandahålla allt möjliga sätt dess vidare användning. Det är mycket viktigt att bereda marken för vidare utveckling av platsen. Om du har skapat en webbplats tidigare och tilldelat alla sidor tillägget .html som standard, och först då bestämt dig för att använda PHP, läs sedan vidare.
Tidigare, för att använda SSI, var sidnamnen tvungna att sluta med tillägget .shtml, men idag är de flesta internetservrar konfigurerade så att SSI kan användas på sidor med tillägget .html, vilket är ganska bekvämt. PHP är en helt annan historia - .php-tillägget är standardtillägget. Webbplatsutvecklare vet i förväg vad som kommer att användas givet språk programmering tilldelas rhinestone den korrekta förlängningen.
Men vad ska man göra när alla sidor slutar med tillägget .html?
Ersätt HTML-tillägget med PHP
Detta kan göras på flera sätt. Det mest uppenbara sättet är att ge alla sidor ett .php-tillägg eller ändra befintliga tillägg (.html, .shtml, etc.). Denna metod har nackdelar. Till exempel måste redan indexerade sidor med tillägget .html indexeras igen sökmotorer. Eller ännu värre - allt externa länkar, som uttryckligen länkar till en viss sida kommer att vara ogiltiga. Och du måste meddela ägarna av varje webbplats om dessa ändringar och skapa en annan sida med 301-fel för varje sida. Naturligtvis är det acceptabelt att ändra ett tillägg till ett annat, men vad händer om webbplatsen redan har många sidor och många länkar till olika sidor från andra webbplatser?
Av en medveten anledning det här ögonblicket alla sidor på den här webbplatsen slutar med html-tillägget, och jag ville inte göra ovanstående ändringar, vilket skapade onödiga svårigheter för mig själv.
Du kan göra det på ett annat sätt. Om servern som är värd för webbplatsen stöder mod_rewrite (i de flesta fall gör den det) och det finns tillgång till .htaccess-filen, kan du lägga till följande rader till just den här filen:
RewriteEngine på RewriteRule ^(.*)\.html $1\.php
Genom att lägga till den här koden i .htaccess behöver du inte oroa dig. Alla begärda icke-existerande sidor med en .html-tillägg kommer automatiskt att ersättas med en .php-tillägg tack vare Apaches underverk. Men denna metod är inte den enda. Du kan skriva följande i samma .htaccess-fil:
AddHandler application/x-httpd-php .php .html .htm
Enligt min mening det mest framgångsrika sättet. Detta gör HTML-sidor lika med PHP-sidor, vilket innebär att alla PHP-funktioner nu kan användas på sidor med HTML-tillägg. Om du inte har tillgång till .htaccess-filen kan du skriva ett brev till värdföretaget och artigt be administratörerna att registrera sig i Apache-konfigurationer(httpd.conf) det nödvändiga värdet för webbplatsen.
Förresten, om webbplatsen tidigare använde SSI enligt följande:
sedan i det nya PHP-tillståndet måste denna kod ersättas med:
include("file.txt"); ?>
Tja, det är allt, jag tror att en av ovanstående metoder kommer att hjälpa.
PHP är ett inbäddat programmeringsspråk på serversidan. Mycket av dess syntax är lånat från C, Java och Perl. Och även lagt till ett par unika egenskaper endast för PHP-funktioner. Huvudsyftet med detta språk är att skapa dynamiskt genererade PHP HTML-sidor.
PHP till HTML
När du skapar komplexa webbsidor kommer du att ställas inför behovet av att kombinera PHP och HTML för att utföra specifika uppgifter. Vid första anblicken kan detta verka komplicerat, eftersom PHP och HTML är två oberoende discipliner, men så är det inte. PHP är designat för att interagera med HTML, och dess kod kan inkluderas i siduppmärkning.
PHP-kod ingår i HTML-sidor med hjälp av speciella taggar. När en användare öppnar en sida bearbetar servern PHP-koden och skickar sedan resultatet av behandlingen (inte PHP-kod) till webbläsaren.
HTML och PHP är ganska lätta att kombinera. Alla delar av ett PHP-skript utanför taggarignoreras av PHP-kompilatorn och skickas direkt till webbläsaren. Om du tittar på exemplet nedan kan du se att ett komplett PHP-skript kan se ut så här:
Hej idag.