Pogledajte određenu poruku
Staro 13. 10. 2006.   #9
Ilija Studen
Direktor Kombinata
Invented the damn thing
 
Avatar Ilija Studen
 
Datum učlanjenja: 07.06.2005
Poruke: 2.669
Hvala: 44
119 "Hvala" u 64 poruka
Ilija Studen će postati "faca" uskoroIlija Studen će postati "faca" uskoro
Default

Samo par tipova, možda nekom bude koristilo:
  • Stripovanje slasheva treba odraditi odmah, negde u headeru. Samo stripovanje pri interakciji sa bazom može doveste da se (nepravilni) stringovi sa slashevima sačuvaju u neki drugi "izvor" (fajl, pošalju nekom web servisu or whatever). Strip odmah pa ni ne razmišljaš o tome.
  • Umesto da koristiš sopstvene funkcije za escapeovanje bolje je da koristiš stvari koje ti PHP i MySQL daju, pre svega mysql_real_escape_string.
  • Imati neku prepare funkciju nije nimalo loša stvar. Spašava glavu jer ne moraš da razmišljaš o escapevoanju, samo korstiš gotovu funkciju. Ono što ja koristim je ušnirano na par nivoa pa je jako teško izvući konkretan kod, ali bi izgledalo nešto ovakvo:

PHP kôd:
<?php

  
function prepare_string() {
    
$arguments func_get_args();
    if(
is_array($arguments) && count($arguments) > 0) {
      
$sql array_shift($arguments);
      foreach(
$arguments as $argument) {
        
$sql str_replace_first('?'"'" mysql_real_escape_string($argument) . "'"$sql);
      } 
// foreach
      
return $sql;
    } 
// if
    
return false;
  } 
// prepare_string
  
  
function str_replace_first($search_for$replace_with$in) {
    
$pos strpos($in$search_for);
    if(
$pos === false) {
      return 
$in;
    } else {
      return 
substr($in0$pos) . $replace_with substr($in$pos strlen($search_for), strlen($in));
    } 
// if
  
// str_replace_first
  
  
print prepare_string("SELECT * FROM users WHERE id = ?"12) . '<br />';
  print 
prepare_string("SELECT * FROM users WHERE id = ? AND name = ?"12'Ilija') . '<br />';
  print 
prepare_string("SELECT * FROM users WHERE id = ? AND name = ?"12'Now with \ slash') . '<br />';

?>
Output:

Kôd:
SELECT * FROM users WHERE id = '12'
SELECT * FROM users WHERE id = '12' AND name = 'Ilija'
SELECT * FROM users WHERE id = '12' AND name = 'Now with \\ slash'
Možemo se ovde još igrati (npr, meni spremi i nizova za IN, prepoznaje neke moje tipove kao DateTime objekte itd), ali poenta je jednostavna i ovo je dovoljno za većinu stvari.

Citat:
Originalno napisao LiquidBrain
To plus regularni izrazi da se uverim da neko nije pokushao neshto... Ako jeste odma logujem IP
Mudro! Sad mi reci šta konkretno imaš od toga?

Poslednja izmena od Ilija Studen : 13. 10. 2006. u 17:15.
Ilija Studen je offline   Odgovorite uz citat