Is it already secure?
Sì, hai usato correttamente le istruzioni preparate e, con tutto ciò che sappiamo al momento, dovrebbe essere sicuro (supponendo che tu non usi alcuni set di caratteri multibyte dispari ). Se in futuro verranno riscontrati problemi di sicurezza in PDO, probabilmente ne sentirai la conoscenza e, se aggiorni regolarmente il software, dovrebbe essere risolto in tempi ragionevoli.
Do I have to add an attribute, say, strip_tags, html entities?
Non devi, e non dovresti neanche. Non dovresti cambiare i dati quando li inserisci nel database, questo porterà solo a problemi in seguito.
strip_tags
e htmlentities
vengono utilizzati per prevenire XSS (sebbene non si debba usare strip_tags
), che è un attacco che si verifica quando si stampano i dati all'utente, non quando lo si inserisce nel database. Ed è qui che dovresti difenderti (questo porta a dati più puliti, codice più pulito e sicurezza migliore).
or to declare intval before the ID
Puoi usare qualcosa come is_numeric($input)
o qualcosa come (int) $input == $input
. Non è una cattiva idea da un punto di vista UX (puoi segnalare qualcosa come Only integers are acceptable
, e non è male come difesa in profondità (anche se non è necessario neanche).
What about using SSL plus PDO scripting?
SSL è qualcosa di completamente diverso. Non proteggerà il tuo server dagli attacchi, ma proteggerà i tuoi utenti (tieni presente che probabilmente sei anche un utente) contro gli attacchi man in the middle (che possono essere utilizzati ad esempio per rubare le loro password o leggere dati privati) . Se disponi di dati sensibili e / o di un modulo di accesso, potrebbe essere una buona idea utilizzare SSL / TLS.
Ciò che ti garantirebbe maggiore sicurezza contro gli attacchi sarebbe un firewall a livello di applicazione come mod_security, che controlla sostanzialmente tutti gli input contro un paio di regex per trovare e prevenire gli attacchi (non dovresti fare affidamento su questo però, è solo un ulteriore livello di sicurezza).