Pregunta

Lo básico:

  • Tengo un formulario de contacto que usa php para validar el formas (además del lado del cliente) Sin embargo, esto podría hacerse en cualquier idioma del lado del servidor.
  • El lado del servidor solo permite     A-z 0-9 para ciertos campos (es     aceptable para validar este campo a     Inglés solo con ese rango extremadamente limitado)
  • Si el formulario contiene errores, vuelvo a llenar los campos para que el usuario no tenga que volver a escribir antes de enviarlo nuevamente
  • Estoy dispuesto a no permitir que otros sitios publiquen en mi formulario, incluso si se puede encontrar un uso legítimo allí.

Puedo hacer fácilmente un formulario en un sitio web diferente que publica una palabra sucia en un campo. Ciertas palabras sucias son perfectamente legítimas de acuerdo con las reglas de validación, pero a mi empleador obviamente no le gustaría que eso suceda.

Tengo la impresión de que los piratas informáticos dedicados pueden afectar a las cookies, las sesiones php y, por supuesto, los campos ocultos son fáciles de falsificar, junto con los referentes y demás. ¿Cómo puedo bloquear sitios de terceros para que no se publiquen en mi página?

Por favor, siéntase libre de ayudarme a Google para esto también. Mis términos de búsqueda son débiles y los métodos de acceso que conozco fallarán.

¿Qué pasa si alguien envía "d03boy come gatos"? ¿A través de un formulario en su sitio y hace que la gente haga clic en un enlace que lo envíe a mi formulario? (Admita que es posible, y mi empresa no puede aceptar ningún riesgo) Luego, cuando un usuario hace clic en el enlace que ve dentro del " nombre " el campo " d03boy come gatos " y se ofende mucho y contacta a PETA sobre el contenido de nuestro sitio. Simplemente no podemos explicarle al usuario lo que sucedió. Es cierto que no pasó nada, pero molestar a un solo usuario no es aceptable para mi empleador.

Nuestra solución actual es no informar ningún comentario del usuario, lo que, en mi opinión, es un gran problema de usabilidad.

¿Fue útil?

Solución

Parece que necesita un sistema de moderación para el contenido generado por el usuario, no una solución técnica. Obviamente, puede verificar el campo de referencia, la limpieza de contenido e intentar filtrar lo profano, pero la enumeración de la maldad nunca funciona. (Puede ser un "primer paso" aceptable, pero los seres humanos son infinitamente ingeniosos para evitar tales filtros).

Ponga el contenido enviado por el usuario en una cola y haga que los moderadores revisen y aprueben el contenido. Para aligerar la carga, puede configurar a los usuarios de confianza en " previamente aprobados " ;, pero ha dicho que su cliente no puede aceptar ningún riesgo.

Francamente, lo encuentro imposible: incluso con los moderadores existe el riesgo de que un moderador subvierta su sistema. Si eso es realmente cierto (que tienen cero tolerancia al riesgo), entonces sugiero que no acepten las aportaciones de los usuarios, no confíen en los moderadores y, de hecho, eliminen el sitio en sí (porque una persona con información privilegiada podría ignorar y poner algo inapropiado). Claramente cada acto tiene riesgo; debe averiguar cuánto pueden aceptar, como una cola de aprobación basada en un moderador.

Otros consejos

No estoy seguro de entender completamente su pregunta, pero haré todo lo posible para darle una respuesta básica.

Cross Site Scripting (XSS) ocurre generalmente cuando alguien más pone HTML en sus formularios. Su sitio web permite que esto suceda porque no está escapando el HTML correctamente. Si usa PHP, probablemente quiera usar la función htmlentities ($ str, ENT_QUOTES).

htmlentities($str, ENT_QUOTES)

PHP htmlentities

Mi intento

...
<?
$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(

Mi intento

<*>

Ya que no uso sesiones en ningún otro lugar del sitio, no creo que estemos expuestos al secuestro de sesiones. El token cambia cada carga, y para obtener el token que coincida con la sesión que tendría que saber

  1. Estoy usando SHA. Una suposición fácil de hacer en mi código php
  2. Lo guardo en la sesión. supongo la sesión es gettable
  3. Mi sal. Creo que esto es un buen secreto. Si ya conocen mi sal ya dueño de mi servidor
SESSION['TOKEN'])) { if (sha1(

Mi intento

<*>

Ya que no uso sesiones en ningún otro lugar del sitio, no creo que estemos expuestos al secuestro de sesiones. El token cambia cada carga, y para obtener el token que coincida con la sesión que tendría que saber

  1. Estoy usando SHA. Una suposición fácil de hacer en mi código php
  2. Lo guardo en la sesión. supongo la sesión es gettable
  3. Mi sal. Creo que esto es un buen secreto. Si ya conocen mi sal ya dueño de mi servidor
SESSION['TOKEN'] + $salt) === $encoded_token) { $blnGoodToken = true; //echo "Good Token"; } else { //echo "Bad Token"; $blnGoodToken = false; unset(

Mi intento

<*>

Ya que no uso sesiones en ningún otro lugar del sitio, no creo que estemos expuestos al secuestro de sesiones. El token cambia cada carga, y para obtener el token que coincida con la sesión que tendría que saber

  1. Estoy usando SHA. Una suposición fácil de hacer en mi código php
  2. Lo guardo en la sesión. supongo la sesión es gettable
  3. Mi sal. Creo que esto es un buen secreto. Si ya conocen mi sal ya dueño de mi servidor
SESSION); session_unset(); session_destroy(); session_start(); } } else { $blnDoit = false; echo "No Token, possible no session"; } $token = uniqid(rand(), TRUE);

Mi intento

<*>

Ya que no uso sesiones en ningún otro lugar del sitio, no creo que estemos expuestos al secuestro de sesiones. El token cambia cada carga, y para obtener el token que coincida con la sesión que tendría que saber

  1. Estoy usando SHA. Una suposición fácil de hacer en mi código php
  2. Lo guardo en la sesión. supongo la sesión es gettable
  3. Mi sal. Creo que esto es un buen secreto. Si ya conocen mi sal ya dueño de mi servidor
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>

Ya que no uso sesiones en ningún otro lugar del sitio, no creo que estemos expuestos al secuestro de sesiones. El token cambia cada carga, y para obtener el token que coincida con la sesión que tendría que saber

  1. Estoy usando SHA. Una suposición fácil de hacer en mi código php
  2. Lo guardo en la sesión. supongo la sesión es gettable
  3. Mi sal. Creo que esto es un buen secreto. Si ya conocen mi sal ya dueño de mi servidor
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top