securityAuthParam é uma classe que comtempla uma serie de soluções que
permite ofuscar de uma forma segura parametros de "strings" e "arrays".
Nasceu da necessidade básica de ofuscar "query strings" e parametros de formulários
para impedir que uma alteração manual em parametros de "query strings" e ao mesmo
tempo adicionar um hash HMAC a partir de um "salt" para verificação da autenticidade
dos parametros passados.
Uma das mais indicadas utilização é a passgem de parametros para aplicações em ajax.
supondo uma query string usual :
index.php?userID=1&expire=31-12-2020
alterando a query string para :
index.php?userID=2&expire=31-12-2020
Teriamos uma falha de segurança que permitiria um usuario acessar dados de outros ou mesmo
aletrar uma data de expiração de uma consulta, mas adicionando um parametro de autenticidade uma
verificação pode ser fornecida.
index.php?userID=1&expire=31-12-2020&auth=hashHMAC(querystring)
os hash HMAC suportados são todos os possiveis no PHP sendo mais usuados MD5,SHA1,RIMPED160 e SHA256,
o valor default eh RIMPED160 por fornecer o melhor custo/beneficio entre velocidade e segurança.
Quanto mais forte o hash encripado maior se torna a string , valores de ate 2.000 (dois mil) caracteres
são suportados pelos navegadores e webservers, o uso de ZLIB ajuda a compactar a string sem perda
significativa do desempenho e permite que se adicione "n" parametros que contribuem para a segurança da
ofuscação , seja um parametro randomico ou uma data de expiração, patricamente não alterado o tamanho
final da string.
index.php?param = ofuscate auth parameter array
A codificação atente as RFC 4648 e RFC 2045 sendo segura para ser utilizada inclusive por SSL
A classe tambem permite que se crie xml para request e response com parametros de autenticação:
// XML request
$request ='<response action="post">';
$request .="<random>". rand() ."</random>";
$request .="<expiration>". $expiration ."</expiration>";
$request .="<userID>".$UserID."</UserID>";
$request .="</response >";
// Load the XML request info DOM for Authentic param.
$xmlObject = new DOMDocument('1.0', 'UTF-8');
$xmlObject->formatOutput = true;
$xmlObject->loadXML($request);
$Nodes = $xmlObject->getElementsByTagName('response');
foreach ($Nodes as $Node) {
signNode( $xmlObject, $Node, $authparam );
}
echo $xmlObject->saveXML();
Parametros de configuração
constantes:
// chave privada
define("PRIVATEKEY", "my private key");
// modo de encripação do hash
define("HASHMODE","ripemd160");// default ripemd160
// tipo de parametros de retorno :
//array ofuscado
define("AUTHMODE", "AUTHARRAY");// default opcional
// hash hmac ofuscado
define("AUTHMODE", "AUTHSTR");// opcional
|