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

PHP strip_tags

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

PHP strip_tags

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 strip_tags

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

PHP Md5 ja PHP sha1

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.

Võta see postitus kokku järgmiselt: