Skip to content

Commit

Permalink
x
Browse files Browse the repository at this point in the history
x
  • Loading branch information
dg committed Jan 9, 2025
1 parent 143034f commit c03bdf4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 12 deletions.
21 changes: 15 additions & 6 deletions database/cs/security.texy
Original file line number Diff line number Diff line change
Expand Up @@ -113,16 +113,23 @@ Tento útok ukončí původní podmínku pomocí `0)`, připojí vlastní `SELEC
Whitelist sloupců
-----------------

Pokud chcete uživateli umožnit volbu sloupců, vždy použijte whitelist:
Pro bezpečnou práci s hodnotami zadanými uživatelem musíme striktně kontrolovat, které sloupce může ovlivnit. Řešením je whitelist - explicitní seznam povolených sloupců:

```php
// ✅ Bezpečné zpracování - pouze povolené sloupce
// Sloupce, které může uživatel upravovat
$allowedColumns = ['name', 'email', 'active'];
$values = array_intersect_key($_POST, array_flip($allowedColumns));

$database->query('INSERT INTO users', $values);
// Odstraníme všechny nepovolené sloupce ze vstupu
$filteredData = array_intersect_key($_POST, $allowedColumns);

// ✅ Nyní můžeme bezpečně použít v dotazech, jako například:
$database->query('INSERT INTO users', $filteredData);
$table->update($filteredData);
$table->where($filteredData);
```

Filtrací nepovolených sloupců zabráníte útočníkům v manipulaci s citlivými poli a zajistíte bezpečnou práci s databází.


Validace vstupních dat
======================
Expand Down Expand Up @@ -152,9 +159,11 @@ $table = 'users';
$column = 'name';
$database->query('SELECT ?name FROM ?name', $column, $table);
// Výsledek v MySQL: SELECT `name` FROM `users`
```

Důležité: symbol `?name` používejte pouze pro důvěryhodné hodnoty definované v kódu aplikace. Pro hodnoty od uživatele použijte opět [whitelist|#Whitelist sloupců]. Jinak se vystavujete bezpečnostním rizikům:

```php
// ❌ NEBEZPEČNÉ - nikdy nepoužívejte vstup od uživatele
$database->query('SELECT ?name FROM users', $_GET['column']);
```

Důležité: symbol `?name` používejte pouze pro důvěryhodné hodnoty definované v kódu aplikace. Pro hodnoty od uživatele použijte opět whitelist. Jinak se vystavujete bezpečnostním rizikům, jako například dříve uvedený SQL enumeration nebo Mass Assignment Vulnerability.
21 changes: 15 additions & 6 deletions database/en/security.texy
Original file line number Diff line number Diff line change
Expand Up @@ -113,16 +113,23 @@ This attack terminates the original condition with `0)`, appends its own `SELECT
Column Whitelist
----------------

If you want to allow users to choose columns, always use a whitelist:
To securely handle user-provided input, you must strictly control which columns can be affected. The solution is a **whitelist**—an explicit list of allowed columns:

```php
// ✅ Secure processing - only allowed columns
// Columns the user is allowed to modify
$allowedColumns = ['name', 'email', 'active'];
$values = array_intersect_key($_POST, array_flip($allowedColumns));

$database->query('INSERT INTO users', $values);
// Remove all unauthorized columns from input
$filteredData = array_intersect_key($_POST, array_flip($allowedColumns));

// ✅ Now safe to use in queries, such as:
$database->query('INSERT INTO users', $filteredData);
$table->update($filteredData);
$table->where($filteredData);
```

By filtering out disallowed columns, you prevent attackers from tampering with critical fields and ensure safe interaction with the database.


Validating Input Data
=====================
Expand Down Expand Up @@ -152,9 +159,11 @@ $table = 'users';
$column = 'name';
$database->query('SELECT ?name FROM ?name', $column, $table);
// Result in MySQL: SELECT `name` FROM `users`
```

Important: Use the `?name` symbol only for trusted values defined in the application code. For values provided by the user, use a [whitelist|#Whitelist Columns] again. Otherwise, you risk security vulnerabilities:

```php
// ❌ DANGEROUS - never use user input
$database->query('SELECT ?name FROM users', $_GET['column']);
```

Important: Use the `?name` symbol only for trusted values defined in the application code. For values provided by the user, use a whitelist again. Otherwise, you risk security vulnerabilities, such as the previously mentioned SQL enumeration or Mass Assignment Vulnerability.

0 comments on commit c03bdf4

Please sign in to comment.