PHP Säkerhetsfunktion: strip_tags, filter_var, Md5 och sha1

Potentiella säkerhetshot

De är i grunden två grupper av människor som kan attackera ditt system

  • Hackare – med avsikt att få tillgång till obehörig data eller störa applikationen
  • Användare – de kan oskyldigt ange fel parametrar i formulär som kan ha negativa effekter på en webbplats eller webbapplikation.

Följande är de typer av attacker som vi måste hålla utkik efter.

SQL Injection – Den här typen av attack lägger till skadlig kod SQL uttalanden.

Detta görs med antingen användarinmatningsformulär eller URL:er som använder variabler.

Den bifogade koden kommenterar villkoret i WHERE-satsen i en SQL-sats. Den bifogade koden kan också;

  • infoga ett villkor som alltid kommer att vara sant
  • radera data från en tabell
  • uppdatera data i en tabell
  • Denna typ av attack används vanligtvis för att få obehörig åtkomst till en applikation.

Cross-site scripting – denna typ av attack infogar vanligtvis skadlig kod JavaManus. Detta görs med hjälp av användarformulär som kontakta oss och kommentarsformulär. Detta görs för att;

  • Hämta känslig information som t.ex cookies data
  • Omdirigera användaren till en annan URL.
  • Andra hot kan inkludera – PHP-kodinjektion, Shell Injection, Email Injection, Script Source Code Disclosure etc.

Bästa metoder för PHP-applikationssäkerhet

Låt oss nu titta på några av de bästa metoderna för PHP-säkerhet som vi måste tänka på när vi utvecklar våra applikationer.

PHP strip_tags

Strip_tags-funktionerna tar bort HTML, JavaScript eller PHP-taggar från en sträng.

Den här funktionen är användbar när vi måste skydda vår applikation mot attacker som cross site scripting.

Låt oss överväga ett program som accepterar kommentarer från användare.

<?php

$user_input = "Your site rocks";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Förutsatt att du har sparat comments.php i phptuts-mappen, bläddra till URL:enhttp://localhost/phptuts/comments.php

PHP strip_tags

Låt oss anta att du får följande som användarinmatning alert(‘Your site sucks!’);

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Bläddra till URL:en http://localhost/phptuts/comments.php

PHP strip_tags

Låt oss nu säkra vår applikation från sådana attacker med strip_tags-funktionen.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Bläddra till URL:en http://localhost/phptuts/comments.php

PHP strip_tags

PHP filter_var funktion

Filter_var-funktionen används för att validera och sanera data.

Validering kontrollerar om uppgifterna är av rätt typ. En numerisk valideringskontroll på en sträng returnerar ett falskt resultat.

Sanering är att ta bort olagliga tecken från en sträng.

Kolla denna länk för den fullständiga referensen filter_var

Koden är till för kommentarsystemet.

Den använder filter_var-funktionen och FILTER_SANITIZE_STRIPPED-konstanten för att ta bort taggar.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Produktion:

alert('Your site sucks!');

mysqli_real_escape_string funktion Denna funktion används för att skydda en applikation mot SQL-injektion.

Låt oss anta att vi har följande SQL-sats för att validera användar-id och lösenord.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

En illvillig användare kan ange följande kod i textrutan för användar-ID. ' ELLER 1 = 1 — Och 1234 i lösenordstextrutan Låt oss koda autentiseringsmodulen

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Slutresultatet blir

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

HÄR,

  • “SELECT * FROM users WHERE user_id = ”” testar för ett tomt användar-id
  • "' ELLER 1 = 1 " är ett villkor som alltid kommer att vara sant
  • "–" kommenterar den delen som testar lösenordet.

Ovanstående fråga kommer att returnera alla användare. Låt oss nu använda mysqli_real_escape_string-funktionen för att säkra vår inloggningsmodul.

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Ovanstående kod kommer att matas ut

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Anmärkningar det andra enstaka citatet har undvikits för oss, det kommer att behandlas som en del av användar-ID och lösenordet kommer inte att kommenteras.

PHP Md5 och PHP sha1

Md5 är akronymen för Message Digest 5 och sha1 är akronymen för Secure Hash Algorithm 1.

De används båda för att kryptera strängar.

När en sträng väl har krypterats är det tråkigt att dekryptera den.

Md5 och sha1 är mycket användbara när du lagrar lösenord i databasen.

Koden nedan visar implementeringen av md5 och sha1

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Förutsatt att du har sparat filen hashes.php i phptuts-mappen, bläddra till URL:en

PHP Md5 och PHP sha1

Som du kan se av ovanstående hash, om en angripare fick tillgång till din databas, skulle de fortfarande inte veta lösenorden för att logga in.

Sammanfattning

  • Säkerhet avser åtgärder som vidtagits för att skydda en applikation från oavsiktliga och skadliga attacker.
  • strip_tags-funktionen används för att ta bort taggar som t.ex från indata
  • filter_var-funktionen validerar och php-sanerar indata
  • mysqli_real_escape_string används för att sanera SQL-satsen. Det tar bort skadliga karaktärer från uttalandena
  • både MD5 och SHA1 används för att kryptera lösenord.