Questo codice è sicuro per la casella di ricerca o no? [chiuso]

0
$output = '';
if(isset($_POST["query"]))
{
  $output = '';
  $search = "%{$_POST['query']}%";

 $stmt = $con->prepare(" SELECT * FROM tables WHERE cat_name LIKE ?              
 LIMIT 3");

 $stmt->bind_param("s",$search);
 $stmt->execute();
 $result = $stmt->get_result();
 while($row = mysqli_fetch_array($result))
{
$output .= '
<a href="tables.php?id='.$row['cat_id'] .'" 
class="searchLinksStyle w3-col l12  w3-card-4 w3-round-large w3-button" 
>'.$row['cat_name'].'</a>';
 }
echo $output;
    
posta Beginner 19.05.2017 - 03:08
fonte

2 risposte

1
  • Hai dimenticato di html-escape il tuo output = > potenziale vulnerabilità XSS
  • Quando la query include caratteri come % , saranno trattati come caratteri speciali, non come caratteri letterali. Non conosco abbastanza bene le caratteristiche del motore dei caratteri jolly MySQL per capire se questo abilita un attacco DoS (ad esempio tramite un retrocedere catastrofico).
risposta data 19.05.2017 - 08:35
fonte
1
  • Da un lato dell'iniezione SQL, dovresti essere sicuro da quando sei preparato alla dichiarazione.

Vedi la risposta accettata qui .

Dalla risposta accettata:

The main principle there is using prepared statement which is designed for sending safe query to db server, this can be done by escaping user input which is not part of the real query, and also checking the query without any (where clause) to check the validity of the query before using any parameters.

  • La query è limitata a tre risultati ed è su un singolo valore ( cat_name ) che riduce la possibilità di un attacco in stile DOS. Ad esempio:

Se la query potrebbe essere costretta a richiedere molto tempo per l'esecuzione, un utente malintenzionato remoto potrebbe potenzialmente utilizzare molte connessioni al database e forzare un carico eccessivo sul database.

    
risposta data 19.05.2017 - 06:43
fonte

Leggi altre domande sui tag