01.24
MySQL od bardzo wczesnych wersji posiada mechanizm, który powszechnie znany jest jako “komentarze warunkowe”. Przy jego pomocy możemy pisać bardziej eleganckie, przenośne i odporne na błędy zapytania SQL. Komentarze warunkowe są również powszechnie wykorzystywane podczas ataków SQLInjection, a dokładnie w celu sprawdzenia jaka wersja MySQL Serwer zainstalowana jest na serwerze lub też czy w ogóle mamy do czynienia z MySQL Serwerem.
Jak wyglądają więc komentarze warunkowe i jak ich używać? Spójrzmy na poniższy kod:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
Powyższy kod tworzy nową tabelę. Jeśli nasza baza danych to mysql w wersji 3.23.02 lub wyższej to zapytanie będzie działać tak:
CREATE TEMPORARY TABLE t (a INT);
jeśli natomiast naszą bazą nie jest mysql lub wersja jest niższa niż wymagane 3.23.02 to poniższy zapytanie będzie wyglądać następująco:
CREATE TABLE t (a INT);
Banalnie proste, prawda? :)
No dobrze, ale tak na prawdę do czego mogą nam się przydać komentarze warunkowe?
W mysql istnieje bardzo wiele rozszerzeń, których nie znajdziemy w standardzie SQL, ani też nie są one obsługiwane przez inne systemy bazodanowe. Przy pomocy komentarzy warunkowych możemy ukryć te rozszerzenia przed innymi systemami (np. PostrgreSQL lub Oracle) dzięki czemu nasze zapytania (a tym samym cała aplikacja) będzie bardziej przenośna.
Kolejna sprawa to SQL Injection. Często podczas ataku wykorzystujemy różne mechanizmy, które zależą od systemu bazodanowego oraz jego wersji. Dla przykładu w naszym ataku nie będziemy mogli używać unii, jeśli aplikacja działa na MySQL 3.2.x, ponieważ unie są obsługiwane dopiero od wersji 4.0.
Warto wiedzieć jaką wersję MySQL (i czy w ogóle mamy do czynienia z mysql!) mamy na serwerze. Przydaje się to szczególnie w atakach Blind SQL Injection.
Tu rodzi się pytanie: “W jaki sposób mogę sprawdzić jaką wersję MySQL mam zainstalowaną na serwerze oraz czy mam do czynienia z MySQL?”
Spójrzmy na poniższe zapytanie:
SELECT 1 /*! + 3 */ /*!50000 + 5*/;
Poniższy kod zwróci nam następujące wyniki:
- 1, jeśli nie mamy do czynienia z mysql
- 4, jeśli mamy do czynienia z mysql w wersji starszej niż 5.0
- 9, jeśli mamy do czynienia z mysql w wersji 5.0 lub wyższej
Na koniec warto dodać, że komentarze warunkowe to nie jest wynalazek inżynierów mysql’a, ale ten mechanizm jest wykorzystywany również w innych miejscach. Dla webmasterów z pewnością powinien być znany poniższy kawałek kodu, dzięki któremu radzimy sobie z błędami Internet Explorera:
<!--[if IE 6]> <link href="/stylesheets/ie.css" media="screen" rel="stylesheet" type="text/css" /> <![endif]--> <!--[if IE 7]> <link href="/stylesheets/ie7.css" media="screen" rel="stylesheet" type="text/css" /> <![endif]-->
[...] źródło: blog.y3ti.pl Follow us on Twitter 26 śledzących RSS Feed 218 czytelników Komentarze warunkowe w MySQL 1 głosuj! MySQL od bardzo wczesnych wersji posiada mechanizm, który powszechnie znany [...]