29. 05. 2012. | #11 | |
novi član
Na probnom radu
Datum učlanjenja: 17.05.2012
Poruke: 18
Hvala: 4
0 "Hvala" u 0 poruka
|
Ovako imam ponudjeno resenje od kolege ali nisam siguran dal je dobro.
Iako sam testirao AR u CI i radi, ipak bih dodao i mysql_real_escape_string() Kolega se dosetio i napravio svoju klasu koja nasledjuje Input klasu. I tu ce ubaciti ovu funkciju, pa ce obaviti validaciju jos u kontroleru. Ja sam do sad znao pravilo da se validacija i zastita od SQl napada vrsi pre samog upisa u bazu (znaci u model). A kolega kaze da nece da skodi i da ce ovako biti lakse. Zanima me koliko je dobar ovaj nacin, vrsenja validacije kroz input klasu...? (kako za CI primer ali i generalno) a to je ova klasa: http://codeigniter.com/user_guide/libraries/input.html Naravno imamo i ovde CI pravilo, pa je kolega uzeo Input klasu zbog toga... Citat:
Poslednja izmena od etelteam : 29. 05. 2012. u 21:10. |
|
30. 05. 2012. | #12 |
novi član
Na probnom radu
Datum učlanjenja: 17.05.2012
Poruke: 18
Hvala: 4
0 "Hvala" u 0 poruka
|
Evo sta se desava u Active Record Class u CI
Kôd:
/** * "Smart" Escape String * * Escapes data based on type * Sets boolean and null types * * @access public * @param string * @return mixed */ function escape($str) { if (is_string($str)) { $str = "'".$this->escape_str($str)."'"; } elseif (is_bool($str)) { $str = ($str === FALSE) ? 0 : 1; } elseif (is_null($str)) { $str = 'NULL'; } return $str; } Kôd:
/** * Escape String * * @access public * @param string * @param bool whether or not the string will be used in a LIKE condition * @return string */ function escape_str($str, $like = FALSE) { if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = $this->escape_str($val, $like); } return $str; } if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id)) { $str = mysqli_real_escape_string($this->conn_id, $str); } elseif (function_exists('mysql_escape_string')) { $str = mysql_escape_string($str); } else { $str = addslashes($str); } // escape LIKE condition wildcards if ($like === TRUE) { $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str); } return $str; } |
31. 05. 2012. | #13 | |
Ivan Dilber
Sir Write-a-Lot
|
Citat:
Taj napad bi mogao da se upotrebi ako je ime baze ili polja dinamicko i uzima se spolja bez provere, ali to je vec druga prica, jer te od toga ne stiti ni prepered statement. I tamo te vrednosti moraju da budu definisane u SQL-u prilikom prepare-ovanja, tako da bi to moglo da se hakuje na isti nacin.
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 31. 05. 2012. u 01:32. |
|
31. 05. 2012. | #14 | |
novi član
Na probnom radu
Datum učlanjenja: 17.05.2012
Poruke: 18
Hvala: 4
0 "Hvala" u 0 poruka
|
Citat:
In many databases it is advisable to protect table and field names - for example with backticks in MySQL. Active Record queries are automatically protected, however if you need to manually protect an identifier you can use: Kôd:
$this->db->protect_identifiers('table_name'); |
|
31. 05. 2012. | #15 |
Ivan Dilber
Sir Write-a-Lot
|
mislim da se to odnosi na zastitu da slucajno ime polja nije neka rezervisana rec u SQL-u, npr. desava se da slucajno nazoves polje date ili timestamp. Ako ga stavis u backticks onda mozes da koristis kakav zelis naziv polja
__________________
Leadership is the art of getting people to want to do what you know must be done. |
|
|