Pergunta

O básico:

  • Eu tenho um formulário de contato que usos PHP para validar a formas. (Além do lado do cliente) Isso poderia ser feito em qualquer idioma do lado do servidor embora.
  • O servidor só permite A-z 0-9 para certos campos (isto é aceitável para validar este campo para Inglês apenas com essa gama extremamente limitada)
  • Se o formulário contiver erros, eu repovoar os campos para que o usuário não precisa digitar novamente antes de enviar novamente
  • Estou disposto a não deixar que outros sites postar a minha forma, mesmo que o uso legítimo pode ser encontrado lá.

Eu posso facilmente fazer um formulário em um site diferente que os postos um palavrão a um campo. Certas palavras sujas são perfeitamente legítimo de acordo com as regras de validação, mas meu employeer, obviamente, não gostaria que isso acontecesse.

Estou com a impressão de que os hackers dedicados podem afetar os cookies, sessões de php e de campos curso escondidos são fáceis de paródia, juntamente com referências e tal. Como posso bloquear sites de terceiros de publicar a minha página?

Por favor, fique à vontade para me ajudar a Google para isso também. Meus termos de pesquisa são métodos fracos e trazendo até eu sei que vai falhar.

E se submete alguém "come d03boy gatos" através de um formulário em seu site e recebe as pessoas a clicar em um link que envia para a minha forma? (Admiti-lo é possível, e minha empresa não pode aceitar qualquer risco) Então, quando um usuário clica no link que ver dentro o "nome" de campo "come d03boy gatos" e fica super ofendido e contatos PETA sobre o conteúdo do nosso site. Nós simplesmente não podemos explicar ao usuário o que aconteceu. É verdade, não aconteceu nada, mas perturbar um único usuários não é aceitável para o meu empregador.

A nossa solução atual é a de não relatar qualquer entrada do usuário, que na minha opinião é uma questão de grande usabilidade.

Foi útil?

Solução

Isso soa como você precisa de um sistema de moderação no lugar para conteúdo gerado pelo usuário, e não uma solução técnica. Obviamente, você pode verificar o campo de referência, esfoliação conteúdo e tentar filtrar o profano, mas enumerando maldade não funciona. (Pode ser uma "primeira passagem" aceitável, mas os seres humanos são infinitamente inventivo em evitar tais filtros).

Coloque o usuário enviou o conteúdo em uma fila e têm moderadores analisar e aprovar conteúdo. Para aliviar a carga, você pode configurar os usuários a "pré aprovado" confiável, mas você disse que seu cliente não pode aceitar qualquer risco.

Francamente, acho que impossível: mesmo com moderadores, há o risco de que um moderador irá subverter o sistema. Se isso é verdade (que eles têm tolerância ao risco zero), então eu sugiro que eles não aceitar qualquer entrada do usuário, não moderadores de confiança e de fato eliminar o próprio site (porque um insider poderia ir desonestos e colocar algo impróprio). Claramente cada ato tem risco; você precisa descobrir o quanto eles podem aceitar, como um moderador baseado fila de aprovação.

Outras dicas

Eu não estou certo que eu totalmente entendo sua pergunta, mas eu vou fazer o meu melhor para dar-lhe uma resposta básica.

Cross Site Scripting (XSS) acontece geralmente quando alguém coloca em HTML em seus formulários. Seu site permite que isso aconteça, porque não está escapando o HTML corretamente. Se você usar o PHP, você provavelmente vai querer fazer uso dos htmlentities ($ str, ENT_QUOTES) função.

htmlentities($str, ENT_QUOTES)

PHP htmlentities

Minha tentativa

...
<?
$form_token = "";
$token = "";
$encoded_token = "";
$salt = "ThiséèÞ....$ÖyiìeéèÞ";  //it is 70 characters long
...
...
$blnGoodToken = false;
...
...
//Check for the encoded token
session_start();
$encoded_token = GetSuper('POST', 'TOKEN');
if (isset($_SESSION['TOKEN'])) {
    if (sha1($_SESSION['TOKEN'] + $salt) === $encoded_token) {
        $blnGoodToken = true;
        //echo "Good Token";
        }
    else {
        //echo "Bad Token";
        $blnGoodToken = false;
        unset($_SESSION);
        session_unset();
        session_destroy();
        session_start();
        }
    }
else {
    $blnDoit = false;
    echo "No Token, possible no session";
    }

$token = uniqid(rand(), TRUE);
$_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>

Desde que eu não usar sessões em qualquer outro lugar no site, eu não acho que estamos expostos muito para o seqüestro de sessão. O token muda cada carga, e para obter o token para coincidir com a sessão que teria que saber

  1. Eu estou usando SHA. Um palpite fácil fazer no meu código PHP
  2. Eu mantê-lo na sessão. Eu suponho a sessão é gettable
  3. O meu sal. Eu acho que esta é uma boa segredo. Se eles sabem o meu sal eles já possuído meu servidor
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top