Czy taka funkcja zabezpiecza mnie przez SQL injection?

0

Czytałem o sql injection dosyć sporo i po lekturze tego wszystkiego, trochę zaczęło mi się mieszać. Na jednej stronie było napisane żeby używać addslashes();, na innej żeby nie. Jeszcze inne popierały escapowanie (nie wiem do końca co to znaczy), inne że nie.

Zmęczony tym napisałem swoją funkcję, która zwraca z argumentu tylko litery.

  function return_str($str)
  {
    $temp = '';
    for($i=0; $i<strlen($str); $i++)
      if (ctype_alpha($str[$i])) $temp = $temp.$str[$i];
    return $temp;
  }

Czy jeżeli za każdym razem zamiast $_GET['var']; będę używał return_str($_GET['var']); to uniemożliwię sql injection?

0

Monk wspominał w innym wątku o PDO. Nie pamiętam co to dokładnie PDO, ale skorzystaj chociażby z jakichś Prepared Statement (jeżeli ORMy są dla ciebie za ciężkie) zamiast samemu kleić zapytania.

1

Ło Boże, co to jest?

function return_str($str) { return preg_replace('@[^A-Za-z]@', '', $str); }

ctype_alpha, dobre..

Tak, takie coś się sprawdzi, do momentu, w którym będziesz potrzebował od użytkownika jakichś innych literek, albo cyfr. Generalnie to co robisz to jest jakieś kombinowanie. mysql_real_escape_string, albo użytaj PDO (i tak to ktoś zaraz napisze, więc napiszę ja).

0

Jeden ze sposobów na użycie PDO wygląda jak poniżej. Nic trudnego :)

$pdo = new PDO($dataSourceName, "tomriddle", "dupa123");
$zapytanie = $pdo->prepare("select * from users where login = :login and password = :password");
$zapytanie->execute(array(
   ":login" => $_POST["login"],
   ":password" => $_POST["password"]));
$wyniki = $zapytanie->fetchAll(PDO::FETCH_ASSOC);
0

trafia mnie coś. Chce zwrócić id użytkownika. W zmiennych $username i $password są odpowiednio nick i hashowane hasło. mysql_num_rows zwraca 0 tutaj :/ a powinno 1. czemu? Cała funkcja zwraca 'fail' zawsze.

 $q = "SELECT `id` FROM `users` WHERE `username`='$username' AND `password`='$password';";
 $result = mysql_query($q);
   
 if(mysql_num_rows($result) > 0)
   { 
     while($r = mysql_fetch_assoc($result))
       return $r['id'];            
              
   } 
 return 'fail';

1 użytkowników online, w tym zalogowanych: 0, gości: 1