Sposób na SQL Injection w 20 linijkach

Nowoczesne technologie | Wt, 14 Marz 2006 18:26:07 +0100 | Autor: Redakcja | Czytań: 21299

Przedstawiamy kod źródłowy jednej niewielkiej objętościowo funkcji języka PHP, która okazuje się być skutecznym rozwiązaniem na dziury typu SQL Injection. Całość ma jedyne 20 linijek i dodatkowo znacznie przyspiesza generowanie zapytań SQL poprzez zastosowanie szablonu argumentów ściśle określających ich typ.

Funkcja korzysta z wbudowanej funkcji MySQL do dodawania znaków unikowych, jednak rozbudowa funkcjonalności do innych baz danych nie powinna być większym problemem.

<?php


$arrArguments = array();
$intArgumentIndex = 0;

function parseArgument($arrMatches) {
global $arrArguments, $intArgumentIndex;

$strMatch = $arrMatches[0];
$strArgument = @$arrArguments[$intArgumentIndex++];
switch ($strMatch) {
case '%d': return (int)$strArgument;
case '%s': return '"'.
mysql_real_escape_string($strArgument).'"';
case '%b': return (int)((bool)$strArgument);
}
}

function SQL($strSql) {
global $arrArguments, $intArgumentIndex;

$arrArgs = func_get_args();
array_shift($arrArgs);
$arrArguments = $arrArgs;
$intArgumentIndex = 0;
return preg_replace_callback('/(%[dsb])/', 'parseArgument',
$strSql);
}

?>


Zastosowanie:

$sql = SQL('INSERT INTO users (id, uid, name, username, password, newsletter) VALUES (NULL, %d, %s, %s, %s, %b)', $_POST['uid'], $_POST['name'], $_POST['username'], md5($_POST['password']), $_POST['newsletter']);

INSERT INTO users (id, uid, name, username, password, newsletter)
VALUES (NULL, 1, "فukasz \"anAKiN\" Lach", "anakin",
"97296eca657a093aa379778c237e292d", 1)



W tej chwili nie ma jeszcze komentarzy. Możesz jednak dodać swój własny.

Aby dodawać komentarze musisz się zalogować.

W dziale wiadomośći, każda zarejestrowana osoba ma możliwość dodawania swoich wiadomości. Pojawią się one w serwisie po akceptacji jednego z moderatorów. Aby zachęcić was do aktywnego udziału w rozwoju serwisu, przygotowaliśmy konkurs z nagrodami.

Top 20 news
Najaktywniejsi
1 Rellik 9640 pkt.
2 grzemach 870 pkt.
3 betaKondor 470 pkt.
4 Koras 350 pkt.
5 Localghost 140 pkt.
6 kris2005a 140 pkt.
7 elmocamp 100 pkt.
8 Tommy 100 pkt.
9 Scoti 80 pkt.
10 sevar 60 pkt.
Zobacz pełną listę