Sto costruendo un semplice Q & Un'app con PHP, HTML e JS. Ho tre tabelle: users
, question
e answers
, ogni tabella ha la sua chiave primaria e questions
e answers
hanno entrambi vincoli di chiave esterna. questions
store users.uID
per cercare autore e answers
store question.qID
per identificare a quale domanda appartengono, e anche autore che ha scritto la risposta, quindi users.uID
è anche chiave esterna.
Ed ecco la mia preoccupazione principale: come implementare correttamente il pulsante di invio per la risposta, che passa l'ID autore e anche l'ID della domanda che deve essere inserito nella tabella answers
tramite richiesta Ajax, quindi deve ottenere quell'ID da qualche parte. La preoccupazione principale non è XSRF, ma il fatto che l'utente autorizzato possa manometterlo, modificando una parte del codice html se l'ID è memorizzato in modo visibile (o invisibile) da qualche parte.
L'ID utente è semplice, può essere archiviato in sessione una volta recuperato dal DB e l'accesso dell'utente e verrà riutilizzato anche altrove, quindi non è un grosso problema in termini di costi delle prestazioni e può essere accessibile da tutti gli script mentre è nascosto all'utente. Ma anche memorizzare l'ID della domanda in sessione, ogni volta che l'utente visita una domanda, e quindi sostituirlo con un'altra ID di domanda quando visita un'altra domanda mi sembra che stia chiedendo di provocare un carico pesante sul server ad un certo punto.
Aggiungendo hash al pulsante di invio, che viene quindi convalidato dallo script che elabora, anche i dati delle chiamate ajax appaiono complicati, dal momento che è necessario memorizzare anche quell'hash in sessione. Anche l'utilizzo del campo nascosto non è sicuro, poiché l'utente può vedere quel campo nel codice sorgente e può manometterlo.
Quindi dove archiviare in modo efficiente quell'ID domanda, quindi è pronto quando viene premuto il pulsante di invio e anche quell'utente non può manometterlo e inviare una chiamata con un altro ID? La sessione è davvero solo un'opzione?