Qual è il modo migliore per utilizzare mysql_real_escape_string e htmlspecialchars salvando i dati in CakePHP?

StackOverflow https://stackoverflow.com/questions/956761

Domanda

Sto usando FCKEditor con CakePHP e quando salvo i dati inviati dall'editor voglio eseguire le funzioni htmlspecialchars() e mysql_real_escape_string() sui dati per pulirli prima di memorizzarli nel mio database.Il problema è che non sono sicuro di dove farlo all'interno del framework CakePHP.Ho provato nel controller in questo modo:

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

Tuttavia $this->data è un array e tali funzioni si aspettano stringhe, quindi non funzionerà.Lo faccio nell'array validate del modello?Non ne ho idea.Inoltre, fammi sapere se eseguire htmlspecialchars() all'interno di mysql_real_escape_string() non è una buona pratica.

È stato utile?

Soluzione

Non utilizzare htmlspecialchars() quando tu salva dati, usali quando tu produzione dati in HTML.Cosa succede se hai bisogno di guardare i dati in un contesto diverso dall'HTML?

Inoltre non sono un utente Cake, ma sarei sorpreso se dovessi candidarti mysql_real_escape_string() mentre salvi i dati.Il livello di accesso al database dovrebbe proteggerti dall'iniezione SQL e, facendolo manualmente, finirai per archiviare stringhe con doppio escape.

Altri suggerimenti

La risposta breve e semplice è - se l'accesso al database è stata riassunta via, non c'è bisogno di chiamare queste funzioni affatto.

L'unico posto dove sono necessari è se costruire SQL effettivo da pezzi di stringhe. Il che non si dovrebbe fare comunque, ma questa è un'altra storia.

Linea di fondo è - il quadro farà la cosa giusta, non interferiscono

.

EDIT:. Come Bill Karwin sottolinea - htmlspecialchars() è dal reparto completamente sbagliato qui

Se si sta costruendo il proprio stringhe SQL con CakePHP, quindi CakePHP fornisce la funzione di fuga:

escape(string $string, string $connection)

http://book.cakephp.org/view/1186/escape

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top