Bezpečnosť webových aplikácií je kľúčová, najmä ak pracujete s citlivými údajmi. PHP je výkonný jazyk na tvorbu dynamických webov, no bez správnych bezpečnostných opatrení sa vaša aplikácia môže stať cieľom hackerov. V tomto článku sa pozrieme na hlavné bezpečnostné hrozby v PHP a ukážeme si, ako ich efektívne eliminovať.
Bezpečnostné praktiky sú metódy, ktoré pomáhajú predchádzať útokom, ochrane dát a zabezpečeniu integrity aplikácie. Tieto opatrenia zahŕňajú správnu validáciu vstupov, ochranu pred SQL injection, XSS útokmi a bezpečné ukladanie hesiel.
Dodržiavanie bezpečnostných zásad v PHP pomáha:
SQL Injection je jedna z najčastejších bezpečnostných hrozieb, pri ktorej útočník vkladá škodlivý SQL kód do formulára alebo URL.
<?php
$conn = new mysqli("localhost", "root", "", "databaza");
$meno = $_GET["meno"];
$sql = "SELECT * FROM uzivatelia WHERE meno = '$meno'";
$result = $conn->query($sql);
?>
Ak útočník zadá do poľa meno hodnotu ' OR 1=1 --, môže získať prístup k celej databáze.
<?php
$stmt = $conn->prepare("SELECT * FROM uzivatelia WHERE meno = ?");
$stmt->bind_param("s", $meno);
$stmt->execute();
?>
Pripravené SQL dotazy eliminujú možnosť vkladania škodlivého kódu do databázy.
Cross-Site Scripting (XSS) umožňuje útočníkom vkladať škodlivý JavaScript kód do aplikácie.
<?php echo "Vitaj, " . $_GET["meno"]; ?>
htmlspecialchars()<?php echo "Vitaj, " . htmlspecialchars($_GET["meno"], ENT_QUOTES, 'UTF-8'); ?>
Tento spôsob konvertuje špeciálne znaky na bezpečné HTML entity.
Ukladanie hesiel v čitateľnom texte je obrovská bezpečnostná hrozba.
<?php $password = "tajneheslo"; $hash = md5($password); ?>
MD5 a SHA1 sú zastarané a ľahko prelomené metódy hashovania.
password_hash()
<?php
$hash = password_hash("tajneheslo", PASSWORD_DEFAULT);
?>
Tento spôsob využíva bezpečný algoritmus bcrypt a je odolný voči útokom.
Vždy používajte HTTPS protokol na ochranu prenášaných údajov.
<?php
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit;
}
?>
Cross-Site Request Forgery (CSRF) umožňuje útočníkovi vykonávať neoprávnené požiadavky v mene používateľa.
<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!isset($_POST["token"]) || $_POST["token"] !== $_SESSION["token"]) {
die("Neplatný CSRF token.");
}
}
$_SESSION["token"] = bin2hex(random_bytes(32));
?>
Používajte pripravené SQL dotazy (prepare() a bind_param()).
md5() a sha1() nebezpečné?Obe hashovacie funkcie sú zastarané a ľahko prelomené pomocou rainbow tables.
Používajte validáciu údajov, htmlspecialchars() a CSRF tokeny.
password_hash() s bcrypt algoritmom.Ak máte záujem o prezenčné alebo online školenie programovania v PHP, pozrite si našu ponuku na www.like-it.sk. Naše kurzy vedú skúsení odborníci, ktorí vám pomôžu zvládnuť základy aj pokročilé koncepty programovania.
Viac informacií preberáme na kurze:
Kurz PHPMYSQLAJAX - Tvorba webových stránok od základov v PHP a MySQL
Marián Knězek