Como criar uma sessão segura do sistema de gestão em php e mysql
3 Métodos:Define o banco de dados MySQLCria um arquivo de sesion.class.phpCriar páginas com sessões
Este guia irá mostrar-lhe como poupar sessões com segurança em um banco de dados mySQL. Você também vai aprender a criptografar todos os dados da sessão para ir para o banco de dados, ou se alguém conseguir invadir o banco de dados, todas as sessões de dados será com criptografia de 256 bits AES.
método 1
Define o banco de dados MySQL1
Cria um banco de dados MySQL.
Neste guia, vamos criar um banco de dados chamado sesiones_seguras.
Observe como um banco de dados é criado no phpMyAdmin.
Ou você pode usar o código SQL que se segue para criar uma.
Código cria o banco de dados:
Neste guia, vamos criar um banco de dados chamado sesiones_seguras.
Observe como um banco de dados é criado no phpMyAdmin.
Ou você pode usar o código SQL que se segue para criar uma.
Código cria o banco de dados:
CRIAR DATABASE `sesiones_seguras` -
Nota: Alguns serviços não permitem que você crie um banco de dados com o phpMyAdmin, aprender a fazer no cPanel.
2
Criar um usuário que só tem privilégios para SELECT, INSERT, e DELETE.
Então, se houvesse qualquer violação do nosso script de segurança, o hacker não pode excluir tabelas do banco de dados. Se você é realmente paranóico, você cria um usuário diferente para cada função.
Então, se houvesse qualquer violação do nosso script de segurança, o hacker não pode excluir tabelas do banco de dados. Se você é realmente paranóico, você cria um usuário diferente para cada função.
Criar o código do usuário:
CRIAR USUÁRIO `Sec_user`@`Localhost` IDENTIFICADOS BY `EKcGZr59zAa2BEWU`-GRANT SELECIONAR, INSERÇÃO, ACTUALIZAÇÃO, APAGAR ON `sesiones_seguras`.* TO `Sec_user`@`Localhost`-
Nota: Uma boa idéia seria a de alterar a senha acima código para ser executado em seu próprio servidor (certifique-se também alterar o código PHP). Lembre-se que você não precisa se lembrar da senha, para que possa fazer o mais difícil possível. Aqui é um gerador senhas aleatórias.
3
Cria uma tabela MySQL chamados "sessões".
O código que se segue irá criar uma tabela com 4 campos (id, tempo, dados, clave_sesion).
Criar a tabela "sessões":
O código que se segue irá criar uma tabela com 4 campos (id, tempo, dados, clave_sesion).
Criar a tabela "sessões":
CRIAR TABELA `sesiones` (`id` CHAR(128) NÃO NULL,`horario` CHAR(10) NÃO NULL,`data` texto NÃO NULL,`clave_sesion` CHAR(128) NÃO NULL,PRIMÁRIA KEY (`id`)) MOTOR=InnoDB PADRÃO CHARSET=latin1-
Use o tipo de dados CHAR para campos com comprimento conhecido, como campos "identidade" e "clave_sesion" eles sempre terão 128 caracteres. CHAR usando o poder de processamento de reposição.
método 2
Cria um arquivo de sesion.class.php1
Crie uma classe.
Para inicializar uma nova classe, você precisa inserir o seguinte código:
nova classe:
Para inicializar uma nova classe, você precisa inserir o seguinte código:
nova classe:
classe sessão {
2
Criar a função __construct.
Ele irá chamar esta função sempre que você criar uma nova instância de um objeto usando a classe `sessão`. Você pode ler sobre o _construct função PHP aqui.
Isso define o nosso manipulador de sessão personalizado para torná-lo disponível assim que a classe é inicializada (ou seja, ele é feito, compilar ou construir).
função __construct:
Ele irá chamar esta função sempre que você criar uma nova instância de um objeto usando a classe `sessão`. Você pode ler sobre o _construct função PHP aqui.
Isso define o nosso manipulador de sessão personalizado para torná-lo disponível assim que a classe é inicializada (ou seja, ele é feito, compilar ou construir).
função __construct:
função __construct() {// Definir as funções da sessão personalizada.session_set_save_handler(ordem($ this-, `Open`), ordem($ this-, `Fechar`), ordem($ this-, "Read"), ordem($ this-, `Escrever`), ordem($ this-, `Destroy`), ordem($ this-, `Gc`))-// Esta linha impede inesperado quando usando objetos como efeitos manipuladores armazenados.register_shutdown_function(`Session_write_close`)-}
3
Crie uma função inicio_sesion.
Esta função será chamado sempre que alguém quer iniciar uma nova sessão, em vez de usar session_start () -. Olhe para os comentários no código para ver o que cada linha.
função inicio_sesion:
Esta função será chamado sempre que alguém quer iniciar uma nova sessão, em vez de usar session_start () -. Olhe para os comentários no código para ver o que cada linha.
função inicio_sesion:
função inicio_sesion($ session_name, $ garantir) {// Verifique se o cookie de sessão não pode ser acessado por javascript.$ httponly = verdadeiro-// Algoritmo de hash para uso com idsessão. (Utilize hash_algos () para ver uma lista de haxixe disponível)$ session_hash = `SHA512`-// Verifique se um hash disponíveisse (in_array($ session_hash, hash_algos())) {// Defina a função hash.ini_set(`Session.hash_function`, $ session_hash)-}// Quantos bits por hash de caráter.// valores possíveis são `4` (0-9, a-f), `5` (0-9, a-v), e `6` (0-9, a-z, A-Z, "-", ",".)ini_set(`Session.hash_bits_per_character`, 5)-// Forçar a sessão para utilizar apenas cookies, há variáveis de URL.ini_set(`Session.use_only_cookies`, 1)-// Obter os parâmetros do cookie de sessão$ cookieParams = session_get_cookie_params()-// Defina os parâmetrossession_set_cookie_params($ cookieParams, $ cookieParams, $ cookieParams, $ garantir, $ httponly)-// Altere o nome da sessãosession_name($ session_name)-// Nós podemos agora fazer logonsession_start()-// Esta linha regenera e elimina a sessão anterior.// Também gera uma nova chave de criptografia no banco de dados. session_regenerate_id(verdadeiro)-}
4
Crie uma função aberta.
sessões PHP irá chamar esta função para iniciar uma nova sessão, usá-lo para iniciar uma nova conexão no banco de dados.
função de abertura:
sessões PHP irá chamar esta função para iniciar uma nova sessão, usá-lo para iniciar uma nova conexão no banco de dados.
função de abertura:
função aberto() {$ host = `Localhost`-$ user = `Sec_user`-$ passagem = `EKcGZr59zAa2BEWU`-name $ = `Sesiones_seguras`-$ mysqli = novo mysqli($ host, $ user, $ passagem, name $)-$ this--gt;db = $ mysqli-retorno verdadeiro-}
5
Cria uma função próxima.
Esta função será chamada quando a sessão querem ser fechado.
perto função:
Esta função será chamada quando a sessão querem ser fechado.
perto função:
função perto() {$ this--gt;db-gt;perto()-retorno verdadeiro-}
6
Criar uma função de ler.
PHP irá chamar esta função quando você tenta acessar uma sessão, por exemplo, quando você usa echo $ _SESSION-. Como podem existir muitas chamadas para esta função em uma única página, tirar proveito de declarações preparadas, não só para a segurança, mas também para o desempenho. Basta preparar a declaração de uma vez e, em seguida, executá-lo muitas vezes.
Ele também decodifica os dados de sessão criptografados no banco de dados. Você vai usar a criptografia AES de 256 bits em sessões.
função de leitura:
PHP irá chamar esta função quando você tenta acessar uma sessão, por exemplo, quando você usa echo $ _SESSION-. Como podem existir muitas chamadas para esta função em uma única página, tirar proveito de declarações preparadas, não só para a segurança, mas também para o desempenho. Basta preparar a declaração de uma vez e, em seguida, executá-lo muitas vezes.
Ele também decodifica os dados de sessão criptografados no banco de dados. Você vai usar a criptografia AES de 256 bits em sessões.
função de leitura:
função ler($ id) {se(!isset($ this--gt;read_stmt)) {$ this--gt;read_stmt = $ this--gt;db-gt;preparado("dados de selecionar a partir de sessões WHERE id =? LIMIT 1")-}$ this--gt;read_stmt-gt;bind_param(`S`, $ id)-$ this--gt;read_stmt-gt;EXECUTAR()-$ this--gt;read_stmt-gt;store_result()-$ this--gt;read_stmt-gt;bind_result($ dados)-$ this--gt;read_stmt-gt;BUSQUE()-$ key = $ this--gt;getKey($ id)-$ dados = $ this--gt;descriptografar($ dados, $ key)-retorno $ dados-}
7
Crie uma função para escrever.
Esta função é usada quando você atribuir um valor a uma sessão, por exemplo $ _SESSION = "outro cosa`-. A função codifica todos os dados para inserção no banco de dados.
função de escrever:
Esta função é usada quando você atribuir um valor a uma sessão, por exemplo $ _SESSION = "outro cosa`-. A função codifica todos os dados para inserção no banco de dados.
função de escrever:
função escrever($ id, $ dados) {// Obter uma chave única$ key = $ this--gt;getKey($ id)-// Criptografa dados$ dados = $ this--gt;criptografar($ dados, $ key)-$ time = tempo()-se(!isset($ this--gt;w_stmt)) {$ this--gt;w_stmt = $ this--gt;db-gt;preparado("REPLACE INTO sessões (id, tempo, dados, clave_sesion) VALUES (?,?,?,?)")-}$ this--gt;w_stmt-gt;bind_param("SISS `, $ id, $ time, $ dados, $ key)-$ this--gt;w_stmt-gt;EXECUTAR()-retorno verdadeiro-}
8
Criar uma função para destruir.
Este recurso elimina a base de dados de sessão, o PHP usa ao chamar funções como session__destroy () -.
função de destruir;
Este recurso elimina a base de dados de sessão, o PHP usa ao chamar funções como session__destroy () -.
função de destruir;
função destruir($ id) {se(!isset($ this--gt;delete_stmt)) {$ this--gt;delete_stmt = $ this--gt;db-gt;preparado("DELETE FROM sessões onde id =?")-}$ this--gt;delete_stmt-gt;bind_param(`S`, $ id)-$ this--gt;delete_stmt-gt;EXECUTAR()-retorno verdadeiro-}
9
Cria um gc função (coletor de lixo, por sua sigla em Inglês).
Ele é chamado a função de coletor de lixo para remover sessões de idade. A frequência com que você chamar essa função será determinada pelas duas directivas de configuração, session.gc_probability e session.gc_divisor.
gc () função:
Ele é chamado a função de coletor de lixo para remover sessões de idade. A frequência com que você chamar essa função será determinada pelas duas directivas de configuração, session.gc_probability e session.gc_divisor.
gc () função:
função gc($ max) {se(!isset($ this--gt;gc_stmt)) {$ this--gt;gc_stmt = $ this--gt;db-gt;preparado("DELETE FROM sessões onde o Schedule lt; ?")-}$ antiga = tempo() - $ max-$ this--gt;gc_stmt-gt;bind_param(`S`, $ antiga)-$ this--gt;gc_stmt-gt;EXECUTAR()-retorno verdadeiro-}
10
Cria uma função getKey.
Esta função é usada para obter a única chave para encriptar a tabela de sessão. Se há uma sessão, simplesmente devolve uma nova chave aleatória para criptografar.
função getKey ():
Esta função é usada para obter a única chave para encriptar a tabela de sessão. Se há uma sessão, simplesmente devolve uma nova chave aleatória para criptografar.
função getKey ():
privado função getKey($ id) {se(!isset($ this--gt;key_stmt)) {$ this--gt;key_stmt = $ this--gt;db-gt;preparado("Clave_sesion SELECIONE de onde id = sessões? LIMIT 1")-}$ this--gt;key_stmt-gt;bind_param(`S`, $ id)-$ this--gt;key_stmt-gt;EXECUTAR()-$ this--gt;key_stmt-gt;store_result()-se($ this--gt;key_stmt-gt;num_rows == 1) {$ this--gt;key_stmt-gt;bind_result($ key)-$ this--gt;key_stmt-gt;BUSQUE()-retorno $ key-} mais {$ random_key = de hash(`SHA512`, uniqid(mt_rand(1, mt_getrandmax()), verdadeiro))-retorno $ random_key-}}
11
Cria as funções de criptografia e descriptografia.
Estas funções criptografar sessões de dados com uma chave de cifra da base de dados, que é diferente para cada sessão. Não usar diretamente a chave de criptografia, mas você vai usar para criar a chave de hash ainda mais aleatória.
fuciones criptografar () e descriptografar ():
Estas funções criptografar sessões de dados com uma chave de cifra da base de dados, que é diferente para cada sessão. Não usar diretamente a chave de criptografia, mas você vai usar para criar a chave de hash ainda mais aleatória.
fuciones criptografar () e descriptografar ():
privado função criptografar($ dados, $ key) {$ sal = `CH! Swe! RetReGu7W6bEDRup7usuDUh9THeD2CHeGE * ewr4n39 = E @ rAsp7c-Ph @ pH`-$ key = substr(de hash(`SHA256`, $ sal.$ key.$ sal), 0, 32)-$ iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB)-$ iv = mcrypt_create_iv($ iv_size, MCRYPT_RAND)-$ criptografado = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $ key, $ dados, MCRYPT_MODE_ECB, $ iv))-retorno $ criptografado-}privado função descriptografar($ dados, $ key) {$ sal = `CH! Swe! RetReGu7W6bEDRup7usuDUh9THeD2CHeGE * ewr4n39 = E @ rAsp7c-Ph @ pH`-$ key = substr(de hash(`SHA256`, $ sal.$ key.$ sal), 0, 32)-$ iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB)-$ iv = mcrypt_create_iv($ iv_size, MCRYPT_RAND)-$ descriptografado = MCRYPT_DECRYPT(MCRYPT_RIJNDAEL_256, $ key, base64_decode($ dados), MCRYPT_MODE_ECB, $ iv)-retorno $ descriptografado-}
12
Fechar classes.
Aqui simplesmente fechar as classes com chaves:
Fechar classes:
Aqui simplesmente fechar as classes com chaves:
Fechar classes:
}método 3
Criar páginas com sessões1
administrador usar sessões sessões personalizado.
O seguinte mostra como iniciar uma sessão de Novo- seria necessário incluir isso em todas as páginas que você deseja acessar as sessões, Usá-lo em vez de session_start () -
log:
O seguinte mostra como iniciar uma sessão de Novo- seria necessário incluir isso em todas as páginas que você deseja acessar as sessões, Usá-lo em vez de session_start () -
log:
exigir(`Sesion.class.php`)-$ session = novo sessão()-// Definir como true se você usar https$ session-gt;inicio_sesion(`_s`, falso)-$ _SESSION = `Um valor.`-eco $ _SESSION-

Como para encontrar o intervalo de uma série de dados
Como criar um blog com wordpress
Como geocodificar um endereço no google maps javascript
Como mapreduce em mongodb
Como chamar uma função no visual basic
Usando a opção de pesquisa no excel
Adicionando uma coluna em uma tabela dinâmica
Como aprender php e mysql
Como calcular a média eo desvio padrão do excel 2007
Descobrir moda usando o excel
Como criar e invocar funções em php
Criação de um banco de dados em phpmyadmin
Criação de um banco de dados no mysql
Criação de um banco de dados em sql server
Criando uma função definida pelo usuário no microsoft excel
Como criar um código de login básico em php
Como criar um usuário em um banco de dados oracle
A exclusão de um banco de dados mysql
Evitando csrf (sites de falsificação cross-pedido) com php