Domanda

Le basi:

  • Ho un modulo di contatto che utilizza php per validare il le forme. (oltre al lato client) Questo potrebbe essere fatto in qualsiasi lingua lato server.
  • Solo il lato server lo consente     A-z 0-9 per alcuni campi (lo è     accettabile per convalidare questo campo a     Solo inglese con quella gamma estremamente limitata)
  • Se il modulo contiene errori, ripopolo i campi in modo che l'utente non debba ripetere la digitazione prima di inviare nuovamente
  • Sono disposto a non consentire ad altri siti di pubblicare sul mio modulo, anche se lì si trova un uso legittimo.

Posso facilmente creare un modulo su un altro sito Web che pubblica una parolaccia in un campo. Alcune parolacce sono perfettamente legittime secondo le regole di convalida, ma il mio datore di lavoro ovviamente non vorrebbe che ciò accadesse.

Ho l'impressione che hacker dedicati possano influenzare i cookie, le sessioni php e ovviamente i campi nascosti sono facili da falsificare insieme a referrer e simili. Come posso bloccare la pubblicazione di siti di terze parti sulla mia pagina?

Sentiti libero di aiutare Google anche per questo. I miei termini di ricerca sono deboli e i metodi di allevamento che conosco falliranno.

Che cosa succede se qualcuno invia "d03boy mangia gatti"? tramite un modulo sul loro sito e induce le persone a fare clic su un collegamento che lo invia al mio modulo? (Ammetti che è possibile e la mia azienda non può accettare alcun rischio) Quindi quando un utente fa clic sul link vedono all'interno del "nome" campo "d03boy mangia gatti" e diventa super offeso e contatta PETA sul contenuto del nostro sito. Non possiamo semplicemente spiegare all'utente cosa è successo. È vero, non è successo nulla, ma sconvolgere un singolo utente non è accettabile per il mio datore di lavoro.

La nostra soluzione attuale è quella di non segnalare alcun input dell'utente, che a mio avviso è un grosso problema di usabilità.

È stato utile?

Soluzione

Sembra che tu abbia bisogno di un sistema di moderazione per i contenuti generati dagli utenti, non di una soluzione tecnica. Ovviamente puoi controllare il campo referrer, lo scrub dei contenuti e tentare di filtrare il profano, ma enumerare il male mai funziona. (Può essere un accettabile "primo passaggio", ma gli umani sono infinitamente pieni di risorse per evitare tali filtri).

Inserisci il contenuto inviato dall'utente in una coda e fai rivedere e approvare i contenuti dai moderatori. Per alleggerire il carico, puoi impostare gli utenti fidati su " pre-approvato " ;, ma hai detto che il tuo cliente non può accettare alcun rischio.

Francamente, lo trovo impossibile: anche con i moderatori c'è il rischio che un moderatore sovverta il tuo sistema. Se questo è effettivamente vero (che non tollerano il rischio), allora suggerisco di non accettare alcun input da parte degli utenti, di non fidarsi dei moderatori e di fatto eliminare il sito stesso (perché un addetto ai lavori potrebbe impazzire e mettere qualcosa di scorretto). Chiaramente ogni atto ha dei rischi; devi scoprire quanto possono accettare, ad esempio una coda di approvazione basata su moderatore.

Altri suggerimenti

Non sono sicuro di aver compreso appieno la tua domanda, ma farò del mio meglio per darti una risposta di base.

Cross Site Scripting (XSS) avviene generalmente quando qualcun altro inserisce HTML nei tuoi moduli. Il tuo sito web consente che ciò accada perché non sta sfuggendo correttamente all'HTML. Se usi PHP probabilmente vuoi usare la funzione htmlentities ($ str, ENT_QUOTES).

htmlentities($str, ENT_QUOTES)

PHP htmlentities

Il mio tentativo

...
<?
$form_token = "";
$token = "";
$encoded_token = "";
$salt = "ThiséèÞ....<*>#214;yiìeéèÞ";  //it is 70 characters long
...
...
$blnGoodToken = false;
...
...
//Check for the encoded token
session_start();
$encoded_token = GetSuper('POST', 'TOKEN');
if (isset(

Il mio tentativo

<*>

Dato che non utilizzo sessioni altrove sul sito, non penso che siamo molto esposti al dirottamento delle sessioni. Il token cambia ogni carico e per far corrispondere il token alla sessione, dovresti saperlo

  1. Sto usando SHA. Un'ipotesi facile make sul mio codice php
  2. Lo tengo nella sessione. Credo la sessione è ottenibile
  3. Il mio sale. Penso che questo sia un bene segreto. Se conoscono già il mio sale possedevo il mio server
SESSION['TOKEN'])) { if (sha1(

Il mio tentativo

<*>

Dato che non utilizzo sessioni altrove sul sito, non penso che siamo molto esposti al dirottamento delle sessioni. Il token cambia ogni carico e per far corrispondere il token alla sessione, dovresti saperlo

  1. Sto usando SHA. Un'ipotesi facile make sul mio codice php
  2. Lo tengo nella sessione. Credo la sessione è ottenibile
  3. Il mio sale. Penso che questo sia un bene segreto. Se conoscono già il mio sale possedevo il mio server
SESSION['TOKEN'] + $salt) === $encoded_token) { $blnGoodToken = true; //echo "Good Token"; } else { //echo "Bad Token"; $blnGoodToken = false; unset(

Il mio tentativo

<*>

Dato che non utilizzo sessioni altrove sul sito, non penso che siamo molto esposti al dirottamento delle sessioni. Il token cambia ogni carico e per far corrispondere il token alla sessione, dovresti saperlo

  1. Sto usando SHA. Un'ipotesi facile make sul mio codice php
  2. Lo tengo nella sessione. Credo la sessione è ottenibile
  3. Il mio sale. Penso che questo sia un bene segreto. Se conoscono già il mio sale possedevo il mio server
SESSION); session_unset(); session_destroy(); session_start(); } } else { $blnDoit = false; echo "No Token, possible no session"; } $token = uniqid(rand(), TRUE);

Il mio tentativo

<*>

Dato che non utilizzo sessioni altrove sul sito, non penso che siamo molto esposti al dirottamento delle sessioni. Il token cambia ogni carico e per far corrispondere il token alla sessione, dovresti saperlo

  1. Sto usando SHA. Un'ipotesi facile make sul mio codice php
  2. Lo tengo nella sessione. Credo la sessione è ottenibile
  3. Il mio sale. Penso che questo sia un bene segreto. Se conoscono già il mio sale possedevo il mio server
SESSION['TOKEN'] = $token; $form_token = sha1($token + $salt); ... ... ?> ... ... <form action="request.php?doit=y" method="post"> <input type="text" name="TOKEN" id="TOKEN" value="<?=$form_token?>" /> <!-- form stuff --> <input type="reset" value="Clear" /> <input type="submit" value="Submit" /> </form>

Dato che non utilizzo sessioni altrove sul sito, non penso che siamo molto esposti al dirottamento delle sessioni. Il token cambia ogni carico e per far corrispondere il token alla sessione, dovresti saperlo

  1. Sto usando SHA. Un'ipotesi facile make sul mio codice php
  2. Lo tengo nella sessione. Credo la sessione è ottenibile
  3. Il mio sale. Penso che questo sia un bene segreto. Se conoscono già il mio sale possedevo il mio server
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top