PHP-suojaustoiminto: strip_tags, filter_var, Md5 ja sha1
⚡ Älykäs yhteenveto
PHP Security suojaa verkkosovelluksia hyökkääjiltä ja huolimattomalta syötteeltä validoimalla, puhdistamalla ja tallentamalla tiedot turvallisesti. Tämä ohje kattaa tärkeimmät uhat ja näyttää sitten strip_tags-, filter_var- ja esca-arvot.pingja moderni salasanatiivistys password_hash-funktiolla XSS:ää, SQL-injektiota ja varastettuja tunnistetietoja vastaan suojautumiseksi.

Mahdolliset turvallisuusuhat
Järjestelmääsi vastaan voi hyökätä periaatteessa kaksi ihmisryhmää:
- Hakkerit – tarkoituksenaan päästä luvattomiin tietoihin tai häiritä sovellusta
- Käyttäjät – he saattavat tahattomasti syöttää lomakkeisiin vääriä parametreja, millä voi olla kielteisiä vaikutuksia verkkosivustoon tai verkkosovellukseen.
Seuraavat ovat hyökkäystyyppejä, joita meidän on varottava.
SQL Injection – tämäntyyppinen hyökkäys lisää haitallista koodia SQL lausuntoja.
Tämä tehdään joko käyttäjän syötteiden avulla tai URLjotka käyttävät muuttujia.
Liitetty koodi kommentoi pois SQL-lauseen WHERE-lausekkeen ehdon. Liitetty koodi voi myös:
- lisää ehto, joka on aina totta
- poistaa tiedot taulukosta
- päivittää tiedot taulukossa
Tämän tyyppistä hyökkäystä käytetään yleensä luvattoman pääsyn saamiseksi sovellukseen.
Sivustojen välinen komentosarja (XSS) – Tämän tyyppinen hyökkäys lisää haitallista koodia, yleensä JavaSkripti. Tämä tehdään käyttäjän syötteiden, kuten yhteydenotto- ja kommenttilomakkeiden, avulla. Tämä tehdään seuraavaa varten:
- Hae arkaluonteisia tietoja, kuten evästetiedot
- Ohjaa käyttäjä toiseen paikkaan URL.
Muita uhkia voivat olla PHP-koodin injektointi, shell-injektio, sähköpostin injektointi ja komentosarjojen lähdekoodin paljastuminen.
PHP-sovellusten suojauksen parhaat käytännöt
Katsotaanpa nyt joitakin PHP:n tietoturvan parhaita käytäntöjä, jotka meidän on otettava huomioon kehitystyössä.ping sovelluksemme.
PHP strip_tags
strip_tags-funktio poistaa HTML-koodin, JavaKäsikirjoitustai merkkijonon PHP-tageja.
Tämä funktio on hyödyllinen, kun meidän on suojattava sovellustamme hyökkäyksiltä, kuten sivustojenvälisiltä komentosarjoilta.
Tarkastellaan sovellusta, joka vastaanottaa käyttäjien kommentteja.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Olettaen, että olet tallentanut comments.php-tiedoston phptuts-kansioon, selaa kohtaan URL http://localhost/phptuts/comments.php
Oletetaan, että saat käyttäjäsyötteenä seuraavan: alert(‘Your site sucks!’);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Selaa URL http://localhost/phptuts/comments.php
Suojataan nyt sovelluksemme tällaisilta hyökkäyksiltä strip_tags-funktion avulla.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Selaa URL http://localhost/phptuts/comments.php
PHP filter_var-funktio
Filter_var-funktiota käytetään tietojen vahvistamiseen ja puhdistamiseen.
Validointi tarkistaa, ovatko tiedot oikean tyyppisiä. Merkkijonon numeerinen vahvistuksen tarkistus palauttaa väärän tuloksen.
Desinfiointi tarkoittaa laittomien merkkien poistamista a jono.
Katso täydellinen viite tästä linkistä: filter_var
Alla oleva koodi on kommentointijärjestelmää varten. Se käyttää filter_var-funktiota ja FILTER_SANITIZE_STRIPPED-vakiota tagien poistamiseen.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
lähtö:
alert('Your site sucks!');
Huomautus: FILTER_SANITIZE_STRIPPED (FILTER_SANITIZE_STRING-alias) on vanhentunut PHP 8.1:stä alkaen. Uuden koodin kohdalla käytä strip_tags()-funktiota tai turvallisempaa näyttöä varten htmlspecialchars()-funktiota.
PHP mysqli_real_escape_string
mysqli_real_escape_string-funktiota käytetään sovelluksen suojaamiseen SQL-injektiolta.
Oletetaan, että meillä on seuraava SQL-lauseke käyttäjätunnuksen ja salasanan validoimiseksi.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Haitallinen käyttäjä voi päästä sisään ' TAI 1 = 1 — käyttäjätunnus-tekstikenttään ja 1234 salasana-tekstikenttään. Koodataanpa todennusmoduuli.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
Lopputulos on:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
TÄSSÄ,
- ”WHERE uid = ”” tarkistaa, onko käyttäjätunnus tyhjä
- ”' TAI 1 = 1” on ehto, joka on aina tosi
- ”–” kommentoi salasanaa testaavan osan.
Yllä oleva kysely palauttaa kaikki käyttäjät. Käytetään nyt mysqli_real_escape_string-funktiota kirjautumismoduulin suojaamiseen. Huomaa, että oikeassa koodissa tämä funktio ottaa tietokantayhteyden ensimmäiseksi argumentikseen.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
Yllä oleva koodi tuottaa seuraavan:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Huomautus: toinen lainausmerkki on vaihdettu, joten sitä käsitellään osana käyttäjätunnusta eikä salasanaa kommentoida pois.
Paras harjoitus: paetaping auttaa, mutta MySQL:n tai PDO:n parametrisoidut valmistetut lauseet ovat suositeltu puolustus SQL-injektiota vastaan, koska tietoja ei koskaan sekoiteta kyselytekstiin.
PHP Md5 ja PHP sha1
MD5 on lyhenne sanoista Message Digest 5 ja SHA1 on lyhenne sanoista Secure Hash Algorithm 1. Molemmat ovat yksisuuntaisia hajautusfunktioita.
Alla oleva koodi näyttää md5:n ja sha1:n toteutuksen.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Olettaen, että olet tallentanut tiedoston hashes.php phptuts-kansioon, selaa kohtaan URL.
Tärkeää: MD5 ja SHA1 ovat nopeita, suolaamattomia tiivisteitä ja ovat ei enää pidetä turvallisena salasanojen tallentamiseen, koska ne voidaan murtaa nopeasti nykyaikaisilla laitteistoilla ja sateenkaaritaulukoilla. Käytä niitä vain muihin kuin tietoturvatarkistuksiin ja käytä alla olevaa menetelmää salasanoille.
Kuinka hajauttaa salasanat turvallisesti PHP:ssä
Salasanojen tallentamiseen PHP tarjoaa password_hash- ja password_verify-muuttujat. Nämä käyttävät hidasta, suolattua algoritmia (oletuksena bcrypt), joten jokainen hash on ainutlaatuinen ja kallis murtaa, vaikka tietokanta varastettaisiin.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- password_hash() luo suolatun tiivisteen (hash) tallennettavaksi tietokantaan; PASSWORD_DEFAULT pitää sinut käytössä nykyisellä suositellulla algoritmilla.
- salasanan_vahvistus() tarkistaa kirjautumisyrityksen tallennettua hajautusta vasten purkamatta sitä koskaan.
Koska suola ja algoritmi tallennetaan tiivisteen sisään, et koskaan hallinnoi niitä itse, mikä tekee tästä oikean ja tulevaisuudenkestävän tavan käsitellä salasanoja PHP:ssä.




