PHP turvafunktsioon: strip_tags, filter_var, Md5 ja sha1
Võimalikud julgeolekuohud
Need on põhimõtteliselt kaks inimrühma, kes võivad teie süsteemi rünnata
- Häkkerid – eesmärgiga pääseda juurde volitamata andmetele või häirida rakendust
- Kasutajad – nad võivad süüdimatult sisestada vormidesse valesid parameetreid, millel võib olla veebisaidile või veebirakendusele negatiivne mõju.
Järgmised on rünnakute liigid, millele peame tähelepanu pöörama.
SQL Injection – Seda tüüpi rünnak lisab kahjuliku koodi SQL avaldused.
Seda tehakse kas kasutaja sisestusvormide või muutujaid kasutavate URL-ide abil.
Lisatud kood kommenteerib tingimust SQL-lause WHERE-klauslis. Lisatud kood võib ka;
- sisestage tingimus, mis on alati tõsi
- kustutada andmed tabelist
- värskendada andmeid tabelis
- Seda tüüpi rünnakuid kasutatakse tavaliselt rakendusele volitamata juurdepääsu saamiseks.
Saidiülene skriptimine – seda tüüpi rünnak lisab tavaliselt kahjulikku koodi JavaSkript. Selleks kasutatakse kasutaja sisestusvorme, nagu meiega ühenduse võtmine ja kommentaaride vormid. Seda tehakse selleks;
- Hankige tundlikku teavet, näiteks küpsiste andmed
- Suunake kasutaja teisele URL-ile.
- Muud ohud võivad hõlmata – PHP-koodi süstimine, Shelli süstimine, e-posti sisestamine, skripti lähtekoodi avalikustamine jne.
PHP rakenduste turvalisuse parimad tavad
Vaatame nüüd mõnda PHP turvalisuse parimat tava, mida peame oma rakenduste arendamisel arvesse võtma.
PHP strip_tags
Funktsioonid strip_tags eemaldavad HTML-i, JavaScript või PHP sildid stringist.
See funktsioon on kasulik, kui peame oma rakendust kaitsma rünnakute, näiteks saidiülese skriptimise eest.
Vaatleme rakendust, mis võtab vastu kasutajate kommentaare.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Eeldades, et olete faili comments.php kausta phptuts salvestanud, sirvige URL-ihttp://localhost/phptuts/comments.php
Oletame, et saate kasutaja sisendiks järgmise alert(‘Your site sucks!’);
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo "<h4>My Commenting System</h4>";
echo $user_input;
?>
Sirvige URL-i http://localhost/phptuts/comments.php
Kaitskem nüüd oma rakendust selliste rünnakute eest, kasutades funktsiooni strip_tags.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo strip_tags($user_input);
?>
Sirvige URL-i http://localhost/phptuts/comments.php
PHP filter_var funktsioon
Funktsiooni filter_var kasutatakse andmete kinnitamiseks ja puhastamiseks.
Valideerimine kontrollib, kas andmed on õiget tüüpi. Stringi numbriline valideerimiskontroll annab vale tulemuse.
Desinfitseerimine on keelatud tähemärkide eemaldamine a nöör.
Täieliku viite saamiseks vaadake seda linki filter_var
Kood on mõeldud kommenteerimissüsteemi jaoks.
See kasutab siltide eemaldamiseks funktsiooni filter_var ja konstanti FILTER_SANITIZE_STRIPPED.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
?>
Väljund:
alert('Your site sucks!');
mysqli_real_escape_string funktsioon Seda funktsiooni kasutatakse rakenduse kaitsmiseks SQL-i sisestamise eest.
Oletame, et meil on kasutaja ID ja parooli kinnitamiseks järgmine SQL-lause.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Pahatahtlik kasutaja saab sisestada kasutaja ID tekstikasti järgmise koodi. ' VÕI 1 = 1 — ja 1234 parooli tekstikastis kodeerime autentimismooduli
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Lõpptulemus saab olema
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
SIIN,
- “SELECT * FROM users WHERE user_id = ”” testib tühja kasutaja ID-d
- "' VÕI 1 = 1 " on tingimus, mis on alati tõene
- “–” kommenteerib seda osa, mis testib parooli.
Ülaltoodud päring tagastab kõik kasutajad. Kasutame nüüd oma sisselogimismooduli turvamiseks funktsiooni mysqli_real_escape_string.
<?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;
?>
Väljastatakse ülaltoodud kood
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
märkused teine üksiktsitaat on meie jaoks välja jäetud, seda käsitletakse kasutajatunnuse osana ja parooli ei kommenteerita.
PHP Md5 ja PHP sha1
Md5 on akronüüm sõnadest Message Digest 5 ja sha1 on Secure Hash Algorithm 1 akronüüm.
Neid mõlemaid kasutatakse stringide krüptimiseks.
Kui string on krüptitud, on selle dekrüpteerimine tüütu.
Md5 ja sha1 on paroolide andmebaasi salvestamisel väga kasulikud.
Allolev kood näitab md5 ja sha1 rakendamist
<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>
Eeldades, et olete salvestanud faili hashes.php kausta phptuts, sirvige URL-i
Nagu ülaltoodud räsidest näha, ei teaks ründaja ikkagi sisselogimiseks vajalikke paroole, kui ründaja pääseks teie andmebaasile juurde.
kokkuvõte
- Turvalisus viitab meetmetele, mis on kehtestatud rakenduse kaitsmiseks juhuslike ja pahatahtlike rünnakute eest.
- strip_tags funktsiooni kasutatakse selliste siltide eemaldamiseks nagu sisendandmetest
- Funktsioon filter_var kinnitab ja php puhastab sisendandmed
- mysqli_real_escape_string kasutatakse SQL-lause puhastamiseks. See eemaldab avaldustest pahatahtlikud märgid
- parooli krüptimiseks kasutatakse nii MD5 kui ka SHA1.




