Qual è il modo migliore per utilizzare mysql_real_escape_string e htmlspecialchars salvando i dati in CakePHP?
-
12-09-2019 - |
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.
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)