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.

  • 🛡️ Tunne uhat: Suurimmat riskit ovat SQL-injektio, sivustojenvälinen komentosarjahyökkäys ja koodin injektointi, jotka yleensä toteutetaan lomakkeiden tai URL parametreja.
  • 🧹 Nauhatunnisteet: strip_tags poistaa HTML:n, JavaSkripti- ja PHP-tagit syötteestä, mikä vähentää tallennetun sivustojen välisen komentosarjan riskiä.
  • Vahvista syöte: filter_var validoi ja puhdistaa tiedot varmistaen, että arvo on odotettua tyyppiä, ennen kuin koodisi luottaa siihen.
  • 🔒 Escape tai Bind: mysqli_real_escape_string poistaa kyselyn syötteen, mutta parametrisoidut valmisteltu lausekkeet ovat vahvempi puolustus SQL-injektiota vastaan.
  • 🔑 Hajautusarvoiset salasanat oikein: Älä koskaan tallenna salasanoja MD5- tai SHA1-koodauksella; käytä password_hash- ja password_verify-koodeja, jotka käyttävät hidasta, suolattua bcrypt-tiivistystä.
  • 💡 Syvyyssuuntainen puolustus: Yhdistä validointi, escaping, HTTPS:ää ja vähiten oikeuksilla varustettuja tietokantatilejä yhden ohjausobjektin käyttämisen sijaan.
  • 🤖 AI Assist: Tekoälytyökalut voivat auditoida PHP-koodia tietoturva-aukkojen varalta ja auttaa korjaamaan SQL-injektion tai XSS-heikkouden turvallisesti.

PHP-tietoturva

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

PHP strip_tags

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

PHP strip_tags

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 strip_tags

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.

PHP Md5 ja PHP sha1

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ä.

UKK

Käytä valmiita lauseita sidottujen parametrien kanssa MySQL:ssä tai PDO:ssa. Ne lähettävät kyselyn ja datan erikseen, joten käyttäjän syöte ei voi koskaan muuttaa kyselyn rakennetta. Tämä on vahvempi vaihtoehto kuin manuaalinen esca.ping tulo.

strip_tags poistaa HTML- ja PHP-tagit kokonaan, kun taas htmlspecialchars muuntaa ne turvallisiksi yksiköiksi, jotta ne näkyvät tekstinä. Tulosteen escaping XSS:ää vastaan ​​htmlspecialchars on yleensä turvallisempi vaihtoehto.

Luo istuntoa kohden yksilöllinen CSRF-tunnus, upota se piilotettuna kenttänä jokaiseen lomakkeeseen ja tarkista se lähetyksen yhteydessä. Hylkää kaikki pyynnöt, joiden tunnus puuttuu tai ei vastaa tallennettua arvoa.

Kyllä. Tekoäly voi etsiä SQL-injektiota, XSS:ää, turvatonta salasanatiivistystä ja turvatonta tiedostojen käsittelyä ja selittää sitten jokaisen riskin ja ehdottaa korjausta. Pidä sitä hyödyllisenä ensimmäisenä tarkastuksena, äläkä korvaa tietoturvatarkastusta.

Kyllä. Liitä haavoittuva koodi, ja tekoäly voi kirjoittaa sen uudelleen valmiilla lauseilla, tulosteena esca.pingja syötteen validointi. Testaa korjattu koodi ja vahvista korjaus alkuperäistä hyökkäyssyötettä vasten.

Tiivistä tämä viesti seuraavasti: