2013-02-26 2 views
-1

Интересно, может ли кто-нибудь помочь мне повысить защиту моего PHP-кода, это очень простой и требует некоторой защиты.Предотвращение инъекций PHP/MySQL

Надеюсь, я предоставил достаточно подробностей относительно того, с чем мне нужна помощь, спасибо большое!

<?php 
    //This is only displayed if they have submitted the form 

    if ($searching =="yes") { 
     echo "<h2>Results</h2><p>"; 
     //If they did not enter a search term we give them an error 

     if ($find == "") 
     if ($f == "") 
     if ($info == "") 
     if ($zip == "") 
     if ($state == "") 
     if ($email == "") 
     if ($address == "") 
     { 
      echo "<p>You forgot to enter a search term"; 
      exit; 
     } 

     // Otherwise we connect to our Database 
     mysql_connect("xx.xx.xx", "xxxx", "xxxxx") or die(mysql_error()); 
     mysql_select_db("xxxxx") or die(mysql_error()); 
     // We preform a bit of filtering 
     $find = strtoupper($find); 
     $find = strip_tags($find); 
     $find = trim ($find); 
     $f = strtoupper($f); 
     $f = strip_tags($f); 
     $f = trim ($f); 
     $info = strtoupper($info); 
     $info = strip_tags($info); 
     $info = trim ($info); 
     $zip = strtoupper($zip); 
     $zip = strip_tags($zip); 
     $zip = trim ($zip); 

     $state = strtoupper($state); 
     $state = strip_tags($state); 
     $state = trim ($state); 

     $email = strtoupper($email); 
     $email = strip_tags($email); 
     $email = trim ($email); 

     $address = strtoupper($address); 
     $address = strip_tags($address); 
     $address = trim ($address); 
     //Now we search for our search term, in the field the user specified 
$data = mysql_query("SELECT * FROM users WHERE fname 
LIKE '%" . mysql_real_escape_string($find)  . "%' AND lname 
LIKE '%" . mysql_real_escape_string($f)   . "%' AND info 
LIKE '%" . mysql_real_escape_string($info)  . "%' AND zip 
LIKE '%" . mysql_real_escape_string($zip)  . "%' AND state 
LIKE '%" . mysql_real_escape_string($state)  . "%' AND email 
LIKE '%" . mysql_real_escape_string($email)  . "%' AND address 
LIKE '%" . mysql_real_escape_string($address) . "%'"); 
//And we display the results 
while($result = mysql_fetch_array($data)) 
{ 
echo $result['fname']; 
echo "<br>"; 
echo $result['lname']; 
echo "<br>"; 
echo $result['info']; 
echo "<br>"; 
echo $result['zip']; 
echo "<br>"; 
echo $result['state']; 
echo "<br>"; 
echo $result['email']; 
echo "<br>"; 
    echo $result['address']; 
echo "<br>"; 
} 
//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
$anymatches=mysql_num_rows($data); 
if ($anymatches == 0) 
{ 
echo "Sorry, but we can not find an entry to match your query<br><br>"; 
} 
//And we remind them what they searched for 
echo "<b>Searched For: 
     </b> " .$find; 
} 
?> 
+0

вместо тузд использования PDO или MySQLi с подготовленными заявлениями, что гораздо безопаснее! – Perry

+0

http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php/12817590#12817590 –

+0

Забудьте о mysql, используйте PDO или mysqli, подготовленные операторы также помогут вам. –

ответ

-2

Просто избавитесь от // We preform a bit of filtering блока.
Остальное вполне нормально.

Однако ваш запрос вряд ли найдет что-либо.
Предполагается ли найти одну строку, содержащую ВСЕ введенные значения?
У меня есть ощущение, что ты имел в виду, а не ORAND ваши КРИТЕРИИ

-1

Не используйте функции MySQL больше, они являются устаревшими.

Вместо этого используйте класс mysqli или pdo.

Для более подробной информации, посмотрите на это StackOverflow размещать

How can I prevent SQL injection in PHP?

Кроме этого, вы код очень некрасиво. Попробуйте отделить свой логик от представления.

-1

Также в php вы можете дезинфицировать данные перед вставкой в ​​базу данных. проверьте этот код.

<?php 
$email = "[email protected]"; //Note the .com missing 
if(filter_var($email, FILTER_SANITIZE_EMAIL)){ 
    echo $email.'<br>'; 
    var_dump(filter_var($email, FILTER_SANITIZE_EMAIL)); 
}else{ 
    var_dump(filter_var($email, FILTER_SANITIZE_EMAIL));  
} 
?> 

поддержка ссылка: php sanitize

-1
<Paranoia> 

1. No using of old mysql functions (told already) 
2. intval() on zip-field 
3. regexp on others 

</Paranoia> 
Смежные вопросы