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-