Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nknk

Session hijacking

Recommended Posts

Alguém já ouviu falar de Session hijacking ?

É uma questão de segurança importante ? Se sim, Quais seriam as soluções?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o que li em alguns sites na era este artigo. Dai pensei que alguem tivesse um código pronto.

 

Eu não entendi como é que se gera um id longo se os ids da session normalmente contém 32 caracteres. O único jeito que eu consigo pensar sobre criptografia seria em ssl, e como ficaria sem ssl? Teria que fazer uma especie de md5 para cada variavel/campo de um $_POST ?

 

Essa função session_regenerate_id() está em vias de extinção? Ou pretende continuar no php6? Pq qdo uso aqui no dreamweaver ela não fica azul.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz algumas modificações pq estava dando erro, mas não sei se estão corretas. Alguém pode verificar? Eu coloquei o session_start() antes

session_set_save_handler para funcionar e outras mudanças não fizeram tanta diferença...

 

<?php
function sessie_regenerate_id() {
	$randlen = 32;
	$randval = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	$randvallen = strlen($randval);
	$random = "";
	for ($i = 1; $i <= $randlen; $i++) {
		$random .= substr($randval, rand(0,($randvallen - 1)), 1);
	}
	if (session_id($random)) {
		return true;
	} else {
		return false;
	}
}

function open($save_path, $session_name)
{
  global $conec;

  $old_sessionid = session_id();
  sessie_regenerate_id();
  $new_sessionid = session_id();

  if (ini_get('session.use_cookies') == 1)
	  setcookie(session_name(), session_id(), ini_get("session.cookie_lifetime"), "/");

  $sql = "UPDATE ".$dtabela." SET session_id = '".$new_sessionid."' WHERE session_id = '".$old_sessionid."'";
  mysql_query($sql, $conec);
  return(true);
}

function close()
{
  global $conec;
  return mysql_close($conec);
}

function read($id)
{
  global $conec;

  $ssnmysqlid = mysql_real_escape_string(session_id(),$conec);

  $sql = "SELECT session_data FROM ".$dtabela." WHERE session_id = '".$ssnmysqlid."'";
	if ($result = mysql_query($sql, $conec)) {
		if (mysql_num_rows($result)) {
			$record = mysql_fetch_assoc($result);
			return strrev($record['session_data']);
		}
	}
  return("");
}

function write($id, $sess_data)
{
  global $conec;

  $ssnmysqlid = mysql_real_escape_string(session_id(),$conec);

  $sql = "REPLACE INTO ".$dtabela." VALUES('".$ssnmysqlid."', '".time()."', '".strrev(mysql_real_escape_string($sess_data,$conec))."')";
  return mysql_query($sql, $conec);
}

function destroy($id)
{
  global $conec;

  $ssnmysqlid = mysql_real_escape_string(session_id());

  $sql = "DELETE FROM ".$dtabela." WHERE session_id = '".$ssnmysqlid."'";
  return mysql_query($sql, $conec);
}

function gc($maxlifetime)
{
  global $conec;

  $ssnmysqlid = mysql_real_escape_string(session_id(),$conec);

  $sql = "DELETE FROM ".$dtabela." WHERE session_expires < '".(time() - $maxlifetime)."'";
  return mysql_query($sql, $conec);
}
$localhost=""; // Session MySQL Host
$usuaro=""; // Session MySQL User
$password=""; // Session MySQL Password
$dbanco=""; // Session MySQL Database
$dtabela=""; // Session MySQL Table in $dbanco;

// Conecta-se ao banco de dados
$conec = mysql_connect($localhost, $usuaro, $password);
mysql_select_db($dbanco, $conec);
session_start();
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não consegui utilizar este script, acho q a session está se perdendo. Por causa disso gostaria de saber se ele é necessário em um sistema que está em https.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.