• User Attivo

    Libreria/classe PHP per interazioni sicure con DB (in Wordpress)

    Buonasera e buone feste,

    Sto pensando di utilizzare wordpress come struttura base di un sito, con un plugin per poter scrivere codice PHP in pagine ed articoli, come fosse un sito fatto a parte nel contenuto, sfruttando per lo più header e footer fissi, e inserendo sidebar e pagine custom.

    Volevo capire se sia possibile, e come, poter usare la connessione al database di wordpress per accedere a tabelle nello stesso database in cui è installato wordpress, ma create da me (in modo da evitare di toccare le tabelle wordpress per poter aggiornare senza problemi), potendo però utilizzare funzioni o classi da richiamare nelle pagine per interagire in modo sicuro col database, raccogliendo dati da form e varie.

    Qualcosa tipo i query builder di codeigniter: codeigniter.com/userguide3/database/query_builder.html
    Ma una classe dedicata solo a queste interazioni, non un framework MVC completo.

    Edit: E sopratutto, tutto ciò mi serve o wordpress ha già classi di questo tipo da poter utilizzare? C'è qualche doc?

    Sapete consigliarmi qualcosa di sicuro e aggiornato?

    Grazie!


  • User Attivo

    Per wordpress penso di evitare ogni plugin e sfruttare i template.

    Per l'interazione con il database ho trovato questo: it.wikihow.com/Creare-uno-Script-Sicuro-per-il-Login-Usando-PHP-e-MySQL

    E avrei alcune domande:

    1. Utilizzano nel DB per salt e password un CHAR(128). Può andar bene e non da problemi di sicurezza o conviene utilizzarli con VARCHAR(255) ?

    2. Alla connessione al database aggiungerei un check per errori di connessione registrando i dettagli in un file di log piuttosto che mostrarli all'utente. Può andare bene?

    3. Utilizzano hash() con SHA512. Ci sono differenze, in termini di sicurezza, se uso password_hash() con PASSWORD_DEFAULT?

    4. Ho letto che non è necessario rigenerare la sessione ad ogni caricamento della pagina. Può avere senso rigenerarla random utilizzando rand() una volta ogni 5 circa (trovai uno script che utilizzava questa modalità)?

    5. Al metodo 5, voce 2, dicono "a questo punto potrebbe essere una buona idea aggiungere la protezione 'CSRF'. Così facendo, se qualcuno riuscisse in qualche modo ad arrivare all'indirizzo di questa pagina nascosta, l'utente verrebbe disconnesso". Non capisco la correlazione tra la specifica pagina di logout e il CSRF, perché lo scrivono lì (pagina senza moduli)? E nelle altre pagine che hanno moduli non serve?

    6. Manca qualcos'altro in quello script o è una buona base?

    Grazie.


  • User Attivo

    Salve Gigi991, risponderò solo ad alcuni punti in base all'articolo che hai menzionato senza entrare nel dettaglio di WP:
    @Gigi991 said:

    Per wordpress penso di evitare ogni plugin e sfruttare i template.

    Per l'interazione con il database ho trovato questo: it.wikihow.com/Creare-uno-Script-Sicuro-per-il-Login-Usando-PHP-e-MySQL

    E avrei alcune domande:

    […]

    1. Utilizzano hash() con SHA512. Ci sono differenze, in termini di sicurezza, se uso password_hash() con PASSWORD_DEFAULT?

    Nel momento in cui scrivo SHA512 è una funzione di hash considerata sicura. Se usi password_hash() con PASSWORD_DEFAULT forse è leggermente di più, però paghi pegno già nell'uso dovendo avere installata una versione di PHP5.5+, e nel caso in cui dovessi trasferire su un server che non ha aggiornato tutti gli algoritmi fortemente sicuri utilizzati nella precedente macchina con quella versione di software, quei specifici settaggi e aggiornamenti. Cito dalla guida online: “Note that this constant is designed to change over time as new and stronger algorithms are added to PHP” in vista dell'uso della funzione password_verify().

    @Gigi991 said:

    1. Ho letto che non è necessario rigenerare la sessione ad ogni caricamento della pagina. Può avere senso rigenerarla random utilizzando rand() una volta ogni 5 circa (trovai uno script che utilizzava questa modalità)?

    Dal mio sommesso punto di vista mi trovo d'accordo con te perché in base a prove che avevo fatto con quell'impostazione e facendo il refresh della pagina già per alcune volte misteriosamente c'era qualcosa di imprevedibile se fatto velocemente.

    @Gigi991 said:

    1. Manca qualcos'altro in quello script o è una buona base?

    L'articolo mi sembra valido, ma come indicato in fondo allo stesso i consigli e le avvertenze mi sembrano ragionevoli.