Bezpečnostní praktiky v PHP

Bezpečnost webových aplikací je klíčová, zvláště pokud pracujete s citlivými údaji. PHP je výkonný jazyk pro tvorbu dynamických webů, ale bez správných bezpečnostních opatření se vaše aplikace může stát cílem hackerů. V tomto článku se podíváme na hlavní bezpečnostní hrozby v PHP a ukážeme si, jak je efektivně eliminovat.

Co jsou bezpečnostní praktiky v PHP?

Bezpečnostní praktiky jsou metody, které pomáhají předcházet útokům, ochraně dat a zabezpečení integrity aplikace. Tato opatření zahrnují správnou validaci vstupů, ochranu před SQL injection, XSS útoky a bezpečné ukládání hesel.

Jaký má bezpečnost v PHP praktický význam?

Dodržování bezpečnostních zásad v PHP pomáhá:

1. Ochrana před SQL Injection

SQL Injection je jedna z nejčastějších bezpečnostních hrozeb, při které útočník vkládá škodlivý SQL kód do formuláře nebo URL.

Nesprávné:

<?php $conn = new mysqli("localhost", "root", "", "databaza"); $jméno = $_GET["jméno"]; $sql = "SELECT * FROM uzivatelé WHERE jméno = '$jméno'"; $result = $conn->query($sql); ?>

Pokud útočník zadá do pole jméno hodnotu ' OR 1=1 --, může získat přístup k celé databázi.

Správné řešení: Použití připravených dotazů

<?php $stmt = $conn->prepare("SELECT * FROM uzivatelé WHERE jméno = ?"); $stmt->bind_param("s", $jméno); $stmt->execute(); ?>

Připravené SQL dotazy eliminují možnost vkládání škodlivého kódu do databáze.

2. Ochrana před XSS útoky

Cross-Site Scripting (XSS) umožňuje útočníkům vkládat škodlivý JavaScript kód do aplikace.

Nesprávné:

<?php echo "Vítej," . $_GET["jméno"]; ?>

Správné řešení: Použití htmlspecialchars()

<?php echo "Vítej," . htmlspecialchars($_GET["jméno"], ENT_QUOTES, 'UTF-8'); ?>

Tento způsob konvertuje speciální znaky na bezpečné HTML entity.

3. Bezpečné ukládání hesel

Ukládání hesel v čitelném textu je obrovská bezpečnostní hrozba.

Nesprávné:

<?php $password = "tajněheslo"; $hash = md5($password); ?>

MD5 a SHA1 jsou zastaralé a lehce prolomené metody hashování.

Správné řešení: Použití password_hash()

<?php $hash = password_hash("tajněheslo", PASSWORD_DEFAULT); ?>

Tento způsob využívá bezpečný algoritmus bcrypt a je odolný vůči útokům.

4. Použití HTTPS

Vždy používejte protokol HTTPS k ochraně přenášených dat.

Nastavení v PHP:

<?php if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') { header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'])); exit; } ?>

5. Ochrana proti CSRF útokům

Cross-Site Request Forgery (CSRF) umožňuje útočníkovi provádět neoprávněné požadavky jménem uživatele.

Správné řešení: Použití CSRF tokenů

<?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)); ?>

Nejčastější otázky

1. Jak zabránit SQL injection?

Používejte připravené SQL dotazy (prepare() a bind_param()).

2. Proč je md5() a sha1() nebezpečné?

Obě hashovací funkce jsou zastaralé a snadno prolomené pomocí rainbow tables.

3. Jak mohu zajistit formuláře?

Používejte validaci dat, htmlspecialchars() a CSRF tokeny.

Top 5 zajímavých faktů o bezpečnosti v PHP

  1. SQL Injection je stále nejčastější zranitelností v PHP aplikacích.
  2. Více než 80 % webových stránek používá neaktuální verze PHP, což zvyšuje riziko útoků.
  3. Nejlepším způsobem ochrany hesel je použití password_hash() s bcrypt algoritmem.
  4. XSS útoky jsou častější než SQL Injection a mohou být velmi nebezpečné.
  5. Použití HTTPS je nezbytné, protože chrání údaje před odposlechem a MITM útoky.

Chcete se naučit PHP bezpečně?

Máte-li zájem o prezenční nebo online školení programování v PHP, podívejte se na naši nabídku na www.like-it.sk. Naše kurzy vedou zkušení odborníci, kteří vám pomohou zvládnout základy i pokročilé koncepty programování.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz PHPMYSQLAJAX - Tvorba webových stránek od základů v PHP a MySQL

Marián Knězek