PHP-beveiligingsfunctie: strip_tags, filter_var, Md5 en sha1
Potentiële bedreigingen voor de veiligheid
Het zijn feitelijk twee groepen mensen die uw systeem kunnen aanvallen
- Hackers – met de bedoeling toegang te krijgen tot ongeautoriseerde gegevens of de applicatie te verstoren
- Gebruikers – ze kunnen onschuldig verkeerde parameters invoeren in formulieren die negatieve gevolgen kunnen hebben voor een website of webapplicatie.
We moeten op de volgende soorten aanvallen letten.
SQL Injection – Bij dit type aanval wordt schadelijke code toegevoegd SQL stellingen.
Dit wordt gedaan met behulp van gebruikersinvoerformulieren of URL's die variabelen gebruiken.
De toegevoegde code geeft commentaar op de voorwaarde in de WHERE-clausule van een SQL-instructie. De bijgevoegde code kan ook;
- voeg een voorwaarde in die altijd waar zal zijn
- gegevens uit een tabel verwijderen
- gegevens in een tabel bijwerken
- Dit type aanval wordt meestal gebruikt om ongeautoriseerde toegang tot een applicatie te verkrijgen.
Cross-site scripting – Bij dit type aanval wordt meestal schadelijke code ingevoegd JavaScript. Dit wordt gedaan met behulp van gebruikersinvoerformulieren zoals contact- en opmerkingenformulieren. Dit wordt gedaan om;
- Haal gevoelige informatie op, zoals cookies gegevens
- Stuur de gebruiker door naar een andere URL.
- Andere bedreigingen kunnen zijn: PHP-code-injectie, shell-injectie, e-mailinjectie, openbaarmaking van scriptbroncode, etc.
Best practices voor PHP-applicatiebeveiliging
Laten we nu eens kijken naar enkele van de best practices voor PHP-beveiliging waarmee we rekening moeten houden bij het ontwikkelen van onze applicaties.
PHP strip_tags
De strip_tags-functies verwijderen HTML, JavaScript of PHP-tags uit een string.
Deze functie is handig wanneer we onze applicatie moeten beschermen tegen aanvallen zoals cross-site scripting.
Laten we een applicatie overwegen die opmerkingen van gebruikers accepteert.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Ervan uitgaande dat u comments.php in de map phptuts hebt opgeslagen, bladert u naar de URLhttp://localhost/phptuts/comments.php
Laten we aannemen dat u het volgende ontvangt als gebruikersinvoer alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Blader naar de URL http://localhost/phptuts/comments.php
Laten we onze applicatie nu tegen dergelijke aanvallen beveiligen met behulp van de strip_tags-functie.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Blader naar de URL http://localhost/phptuts/comments.php
PHP filter_var-functie
De functie filter_var wordt gebruikt om gegevens te valideren en op te schonen.
Validatie controleert of de gegevens van het juiste type zijn. Een numerieke validatiecontrole op een tekenreeks retourneert een vals resultaat.
Sanering betekent het verwijderen van illegale karakters uit een snaar.
Check deze link voor de volledige referentie filter_var
De code is voor het commentaarsysteem.
Het gebruikt de functie filter_var en de constante FILTER_SANITIZE_STRIPPED om tags te verwijderen.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Output:
alert('Your site sucks!');
mysqli_real_escape_string-functie Deze functie wordt gebruikt om een toepassing te beschermen tegen SQL-injectie.
Stel dat we de volgende SQL-instructie hebben voor het valideren van de gebruikers-id en het wachtwoord.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Een kwaadwillende gebruiker kan de volgende code invoeren in het tekstvak voor de gebruikers-id. ' OF 1 = 1 — En 1234 in het tekstvak voor het wachtwoord Laten we de authenticatiemodule coderen
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Het eindresultaat zal zijn
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
HIER,
- “SELECT * FROM gebruikers WHERE user_id = ”” test op een lege gebruikers-ID
- “' OR 1 = 1 “ is een voorwaarde die altijd waar zal zijn
- “–” geeft commentaar op het gedeelte dat test op het wachtwoord.
De bovenstaande query retourneert alle gebruikers. Laten we nu de functie mysqli_real_escape_string gebruiken om onze inlogmodule te beveiligen.
<?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; ?>
De bovenstaande code wordt uitgevoerd
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Note het tweede enkele aanhalingsteken is voor ons geëscaped, het wordt behandeld als onderdeel van de gebruikers-ID en het wachtwoord wordt niet becommentarieerd.
PHP Md5 en PHP sha1
Md5 is de afkorting voor Message Digest 5 en sha1 is de afkorting voor Secure Hash Algorithm 1.
Ze worden beide gebruikt om strings te coderen.
Als een string eenmaal is gecodeerd, is het vervelend om deze te decoderen.
Md5 en sha1 zijn erg handig bij het opslaan van wachtwoorden in de database.
De onderstaande code toont de implementatie van md5 en sha1
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Ervan uitgaande dat u het bestand hashes.php in de map phptuts hebt opgeslagen, bladert u naar de URL
Zoals u kunt zien aan de bovenstaande hashes, zou een aanvaller, als hij toegang zou krijgen tot uw database, nog steeds niet de wachtwoorden kennen waarmee hij kan inloggen.
Samenvatting
- Beveiliging verwijst naar maatregelen die zijn genomen om een applicatie te beschermen tegen onbedoelde en kwaadwillige aanvallen.
- strip_tags functie wordt gebruikt om tags zoals te verwijderen uit invoergegevens
- filter_var-functie valideert en php zuivert invoergegevens
- mysqli_real_escape_string wordt gebruikt om SQL-statements te saneren. Het verwijdert schadelijke tekens uit de statements
- zowel MD5 als SHA1 worden gebruikt om het wachtwoord te coderen.