 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
w31rd0
Data înscrierii: 15/Mar/2004
Mesaje: 165
Locație: Timisoara
|
| Trimis: Lun Ian 24, 2005 10:48 am Titlul subiectului: Sql injection attack |
|
|
Buna,
Vreau sa aduc in discutie (sper ca am postat unde trebuie)
http://docs.php.net/en/security.database.html#security.database.sql-injection
intrebaera mea legata de acest subiect este voi cum tratati datele, folositi vreo clasa anume gen:
http://www.phpclasses.org/browse/package/1341.html
Aveti recomandari legate de o anumita clasa free, intreab asta pt ca am mao folosit clase de pe phpclasses cel putin si a trebuit sa modific codul pentru a o optimiza asa cum aveam eu nevoie, am incercat sa discut cu autorul, dar nu am primit nici un raspuns.
mersi,
bye |
|
| Sus |
|
aurelian
Data înscrierii: 01/Iun/2003
Mesaje: 833
Locație: Bucuresti
|
| Trimis: Lun Ian 24, 2005 11:49 am Titlul subiectului: |
|
|
eu folosesc PEAR::DB si functia escapeSimple():
http://pear.php.net/manual/en/package.database.db.db-common.escapesimple.php
Citat:
DB_common::escapeSimple() -- Escapes a string according to the current DBMS's standards
e un lucru important ce imi asigura si portabilitate. |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Lun Ian 24, 2005 11:51 am Titlul subiectului: |
|
|
Pentru MySQL solutia este, fara discutie, mysql_escape_string/mysql_real_escape_string (http://ro.php.net/mysql_escape_string).
Ideal este ca accesul la baza de date sa se faca printr-un nivel suplimentar de abstractizare (o clasa care sa ofere functionalitatea SQL necesara aplicatiei). Iar problema rezolvarii SQL injection devine problema acestui nivel de abstractizare.
Un exemplu, in care datele manipulate de un query SQL se insereaza folosind sintaxa folosita de Pear:DB (? in query va fi inlocuit cu mysql_escape_string($argument) iar ! va fi inlocuit cu $argument):
an style="color: #000000"><?php class Database
{
...
function fetchAll($query)
{
// get the arguments
$arguments = array_slice(func_get_args(), 1);
// get the query parts
$parts = preg_split('/([?!]+)/ius', $query, -1, PREG_SPLIT_DELIM_CAPTURE);
// recompose the query
$sql = '';
foreach ($parts as $part)
if ($part == '?')
$sql .= mysql_escape_string(array_shift($arguments));
else
if ($part == '!')
$sql .= (string)array_shift($arguments);
else
$sql .= $part;
// run the query
$query_h = mysql_query($sql);
...
}
}
...
Iar asta se poate folosi cam asa:
an style="color: #000000"><?php ...
$db = &new Database();
...
$records = $db->fetchAll('SELECT * FROM table WHERE login = ? AND password = ?', $_POST['login'], $_POST['password']);
....
Numa' bune. |
|
| Sus |
|
octavian.p
Data înscrierii: 10/Feb/2005
Mesaje: 10
|
| Trimis: Joi Feb 10, 2005 10:33 am Titlul subiectului: |
|
|
pana la clase complicate trebuie restrictionate drepturile userului care ruleaza respectiva aplicatie ... asta ptr situri
Ex:
am aplicatia forum.phpromania cu
bd: forum
user: forum
drepturi: minimul necesar DOAR ptr baza de date FORUM ... select, insert, update, etc
pentru aplicatii gen phpmyadmin depinde de gusturi |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|