Evitando csrf (sites de falsificação cross-pedido) com php
2 métodos:
Criar o arquivo de csrf.class.phpProteja suas páginas com csrf.class.phpUm ataque falsificação de solicitação entre sites (CSRF para o short) é um tipo de vulnerabilidade de aplicações web em que a vítima inadvertidamente executar um script em seu navegador que lhe permite tirar partido da sessão que tinha começado em qualquer local determinado. ataques CSRF pode ser feita com GET ou POST solicitações. Este artigo mostra como evitar ataques CSRF sobre sua aplicação web.
passos
Vamos usar dois métodos para evitar ataques CSRF sobre as suas ordens GET e POST.
A primeira coisa a fazer é um identificador aleatório para cada pedido, uma cadeia exclusiva que é gerado para cada sessão. Geramos o identificador e incluí-lo em todas as formas como uma entrada escondida. O sistema irá verificar se o formulário for válido, comparando o identificador que é armazenado na variável de sessão do usuário. Ou será que um invasor pode gerar uma ordem, você deve saber o valor do identificador.
O segundo método consiste em utilizar um nome aleatório para cada campo no formulário. O valor do nome de cada campo aleatório é armazenado em uma variável de sessão e o sistema irá gerar um novo valor aleatório depois de terem submetidos a forma. Ou é para executar um ataque, o atacante tem de adivinhar estes nomes aleatórios sobre os formulários.
Por exemplo, uma ordem que antes era assim:
Agora esta aparência:
passos
É o principal arquivo contendo todas as funções que usamos para evitar ataques CSRF.
lt ;? phpclasse csrf {
Esta função obtém o ID da sessão do usuário. Se não tivesse sido produzido antes de um novo identificador aleatório é gerado.
público função get_token_id() {se(isset($ _SESSION)) {retorno $ _SESSION-} mais {$ TOKEN_ID = $ this--gt;acaso(10)-$ _SESSION = $ TOKEN_ID-retorno $ TOKEN_ID-}}
Esta função obtém o valor do identificador. Se não for criado um antes, será agora gerada.
público função get_token() {se(isset($ _SESSION)) {retorno $ _SESSION-} mais {$ simbólico = de hash(`SHA256`, $ this--gt;acaso(500))-$ _SESSION = $ simbólico-retorno $ simbólico-}}
Esta função é usada para verificar se o identificador e o valor do identificador são válidos. Ele faz isso comparando os valores de GET ou POST pedido com os valores armazenados na variável de sessão do usuário.
público função check_valid($ method) {se($ method == `Post` || $ method == `Get`) {$ post = $ _ POST-$ get = $ _GET-se(isset(${$ method}) && (${$ method} == $ this--gt;get_token())) {retorno verdadeiro-} mais {retorno falso-}} mais {retorno falso-}}
Este é o segundo artigo defesa contra CSRF. Esta função gera nomes aleatórios para os campos do formulário.
público função form_names($ names, $ regenerado) {$ valores = ordem()-foreach ($ names ás $ N) {se($ regenerado == verdadeiro) {unset($ _SESSION)-}$ s = isset($ _SESSION) ? $ _SESSION : $ this--gt;acaso(10)-$ _SESSION = $ s-$ valores = $ s-}retorno $ valores-}
Esta função gera uma seqüência aleatória usando o linux arquivo aleatório para uma maior entropia.
privado função acaso($ len) {se (@is_readable(`/ Dev / urandom`)) {$ f=fopen(`/ Dev / urandom`, `R`)-$ urandom=fread($ f, $ len)-fclose($ f)-}$ return=``-para ($ i=0-$ ilt;$ len-++$ i) {se (!isset($ urandom)) {se ($ i%2==0) mt_srand(tempo()%2147 * 1000000 + (duplo)microtime() * 1000000)-$ rand=48+mt_rand()%64-} mais $ rand=48+ord($ urandom)%64-se ($ randgt;57)$ rand+=7-se ($ randgt;90)$ rand+=6-se ($ rand==123) $ rand=52-se ($ rand==124) $ rand=53-$ return.=chr($ rand)-}retorno $ return-}
Isso completa a classe csrf.
}Estas medidas irão mostrar-lhe como usar a classe para evitar ataques CSRF CSRF.
O código abaixo demonstra como implementar classe CSRF em um formulário.
lt ;? phpsession_start()-incluir `Csrf.class.php`-$ csrf = novo csrf()-// Gera um identificador e valida$ TOKEN_ID = $ csrf-gt;get_token_id()-$ token_value = $ csrf-gt;get_token($ TOKEN_ID)-// Gerar nomes aleatórios para a forma$ form_names = $ csrf-gt;form_names(ordem(`User`, `Senha`), falso)-se(isset($ _ POST], $ _ POST])) {// Verifique se o identificador e seu valor são válidos.se($ csrf-gt;check_valid(`Post`)) {// Obter as variáveis de formulário.$ user = $ _ POST]-$ password = $ _ POST]-// O Formulário função vai aqui}// Gerar um novo valor aleatório para o formulário.$ form_names = $ csrf-gt;form_names(ordem(`User`, `Senha`), verdadeiro)-}?gt;

 Como calcular a derivada de algumas funções básicas
Como calcular a derivada de algumas funções básicas Como para determinar se uma função é injetivo (1-1)
Como para determinar se uma função é injetivo (1-1) Como facilmente encontrar o valor máximo ou mínimo de uma função quadrática
Como facilmente encontrar o valor máximo ou mínimo de uma função quadrática Encontrando-se o inverso de uma função quadrática
Encontrando-se o inverso de uma função quadrática Encontrar a imagem de uma função matemática
Encontrar a imagem de uma função matemática Encontrar o domínio e intervalo de uma função
Encontrar o domínio e intervalo de uma função Como geocodificar um endereço no google maps javascript
Como geocodificar um endereço no google maps javascript Como chamar uma função no visual basic
Como chamar uma função no visual basic Programação com o vbscript
Programação com o vbscript Calculando go no excel
Calculando go no excel Como comparar strings em java
Como comparar strings em java Como criar e invocar funções em php
Como criar e invocar funções em php Criando formulários html
Criando formulários html Criando uma função definida pelo usuário no microsoft excel
Criando uma função definida pelo usuário no microsoft excel Criando uma amostra aleatória em excel
Criando uma amostra aleatória em excel Como executar aplicativos no pós http android
Como executar aplicativos no pós http android Como escrever código padrão c ++
Como escrever código padrão c ++ Como fazer um jogo de pedra, papel e tesoura em java
Como fazer um jogo de pedra, papel e tesoura em java