Jak zabezpieczyć się przed atakami SQL Injection (FIEO)
Przeanalizowanie różnych permutacji konkretnego ataku może przynieść wiele korzyści, bo zdobytą wiedzę wykorzystamy w przyszłej prewencji. Dziś pokażemy podstawy zabezpieczenia strony WWW przed atakami SQL Injections.
Każdy deweloper powinien mieć we krwi dobre praktyki bezpieczeństwa podczas tworzenia aplikacji sieciowych. Podstawowa zasada brzmi: "nie ufaj danym pozyskanym z zewnątrz". Kolejna zasada to „eskejpowanie" (escape) danych przed wysłaniem ich w inne miejsce. Przekładając to na angielski: filter input, escape output (FIEO).
Zasadniczą przyczyną występowania SQL Injections jest niedopilnowanie tej drugiej zasady, czyli "escape output". Konkretnie, chodzi o sytuację, kiedy różnica pomiędzy formatem zapytania SQL a danymi użytymi w zapytaniu nie jest starannie monitorowana. Często spotyka się to w aplikacjach PHP, które budują zapytania w następujący sposób.
<?php
$query = "SELECT *
FROM users
WHERE name = '{$_GET['name']}'";
?>
W tym przypadku wartość $_GET['name'] podana jest z innego źródła - od użytkownika, ale nie jest to ani filtrowane, ani „eskejpowane".
„Eskejpowanie" zachowuje dane w nowym kontekście. Nacisk na tę czynność można traktować jako przypominacz, że dane użyte poza twoją aplikacją (jeśli nie zostaną „eskejpowane") to mogą zostać źle zinterpretowane. Filtrowanie natomiast zapewnia nas, że dane są poprawne, zanim z nich skorzystamy.
Zakładając, że korzystamy z MySQL, to wrażliwość na atak SQL Injection może zostać zmniejszona przez „eskejpowanie" nazwy poprzez mysql_real_escape_string(). Jeśli nazwa jest również filtrowana, to istnieje dodatkowy poziom bezpieczeństwa. Przykład omawianych czynności (FIEO) znajduje się poniżej.
<?php
// Initialize arrays for filtered and escaped data, respectively.
$clean = array();
$sql = array();
// Filter the name. (For simplicity, we require alphabetic names.)
if (ctype_alpha($_GET['name'])) {
$clean['name'] = $_GET['name'];
} else {
// The name is invalid. Do something here.
}
// Escape the name.
$sql['name'] = mysql_real_escape_string($clean['name']);
// Construct the query.
$query = "SELECT *
FROM users
WHERE name = '{$sql['name']}'";
?>
Nazywanie poszczególnych konwencji pomoże wam z zapamiętaniem, co zostało poddane procedurze FIEO. Jednak lepszym sposobem wydaje się skorzystanie z PHP Data Objects (PDO).
Deweloperzy dostają do dyspozycji uniwersalne API do dostępu do danych, gdzie można podpiąć przygotowane wcześniej instrukcje, nawet jeśli wyróżniona baza danych nie istnieje. Przykład poniżej.
<?php// Provide the query format.
$query = $db->prepare('SELECT *
FROM users
WHERE name = :name');
// Provide the query data and execute the query.
$query->execute(array('name' => $clean['name']));
?>
Na stronie z instrukcją do PDO znajdziesz więcej przykładów i informacji.
Popularne
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
21
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Nowy problem z Windows 8: bootuje się za szybko
10
Amerykańscy rodzice straszeni „e-narkotykami” dostępnymi w Sieci
21
Z okazji wypuszczenia akcji Facebooka przypomnijmy sobie, kim jest Zuckerberg
10
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Co czeka programistów po czterdziestce?
27
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Społeczność
jacob000 Pierwsze co się rzuca w oczy to styl w jakim zostało to napisane. Styl...
jacob000 Ciekawe ile z tego wszystkiego ma jakąkolwiek wartość. Dla większości...
Pawel Yep. http://www.youtube.com/watch?v=doNxaK9aQy0
obsservator O co chodzi z tymi czołgami Samsunga? Mają w ofercie?
Aras Bez SEO byśmy mieli same stare śmieci w topach, bo są na starych domenach...
Jarek1983-2 Potwierdzam , że nie webd.pl nie działał przez kilka godzin.
Do...
Wszerad Tylko dwa gatunki mogą na tym skorzystać, filmy przyrodnicze i porno w...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |








