Ir para conteúdo

POWERED BY:

Arquivado

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

fabiapo

Como se proteger contra ataques em campos input

Recommended Posts

Pessoal,

 

Estou desenvolvendo um site em HTML/PHP/JQUERY/Javascript onde se o usuario ver meu código fonte, ele pode ver o nome dos meus campos e manipulá-los através do comando:

javascript:alert(document.getElementById('txt_NomeCampo').value='teste');

 

Mesmo colocando o campo como disabled, isto acontece.

 

Como faço para que isto não aconteça? Pois vejo uma vulnerabilidade alta neste caso, pois posso gravar dados incorretamente no meu banco de dados.

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok Public2004, mas não teria como eu impedir do usuário ver meu código fonte (javascript e html) de forma que não seja possível ver o nome dos campos para manipulação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Impedir 100% acredito que não, pois o HTML/JS é o retorno no navegador do cliente... O que pode ser feito é dificultar estas ações...

Ainda afirmo que a melhor forma de tratar estas informações é no PHP, por exemplo: verificar se a requisição está sendo feito sob seu domínio é uma delas...

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem como.

 

Por mais que você tente dificultar, sempre haverão brechas, e como um usuário mais experiente burlar.

php gera HTML, CSS, Javascript.. experimente testar oque você disse @macielcr7 e dar Ctrl+U no navegador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

maciel,

 

eu posso até colocar em uma variável php, mas tenho que dar um echo nos campos html para que o browser interprete.

 

Daí não adianta muita coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de eu dar uma dica.....

 

me diga o por que disso ....

 

qual o resultado que você quer mostrar ?

melhor dizendo qual seu objetivo.?!'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então esta é a tua falha: 'deixar o trabalho pesado', para uma linguagem que roda no cliente.

 

Oque você pode fazer, é 'critografar' o código Javascript.. deixando ele 'ilegível' para os humanos.. removendo espaços, comentários, quebras de linha.. Alguns sites por ai, fazem essa 'compressão', e até reescrevem trechos do teu código 'complicando ele'.

 

E se o usuário estiver navegando sem suporte à Javascript ?

é possível desabilitar facilmente.. toda a tua aplicação estará comprometida, por você ter a projetado de maneira tão fraca.

 

 

Conhece o FireBUG é um complemento bem legal do Firefox, muitos já cairam, e ainda continuarão a cair, se projetarem sistemas dessa forma. Uma história que vi, foi até que andaram hackeando o joguinho do Orkut (Colheita Feliz), porque ele é fortemente escrito em JS.

 

Deixe o trabalho delicado, para o servidor resolver. Linguagens server-side são muito mais confiáveis e seguras, se você escrever de forma correta.

 

Javascript tem o seu lugar de destaque, mas é preciso tomar cuidado e saber usar. Eu mesmo tive a oportunidade de reescrever um site de um escritório de advogacia, em que o painel administrativo era tão tosco, e mal escrito.. que com alguns truques, eu invadi o sistema falho de login em AJAX, sem nem saber usuário, senha de nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maciel,

 

Seguinte:

 

Eu tenho um sistema workflow onde tenho dados de suma importância, como o número do protocolo e a data de inicio de atendimento.

 

Se um operador conhecer HTML injection, ele pode manipular a data de início do atendimento para dizer que ele está no prazo de atendimento ou o número do registro ou mesmo inserir algum tipo de código malicioso para prejudicar o funcionamento do sistema.

 

Por isto a minha preocupação.

 

Como uso PHP, utilizo o PDO para me proteger de SQL injection, mas no caso do html fico mais desprotegido, pois o usuário tem acesso ao código fonte.

 

Por isto a minha preocupação, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

William,

 

Até concordo com você que eu deveria fazer esta validação no server, mas preciso deixar os campos vermelhinhos para quem não preencheu, ao clicar em um botão realizar determinada ação (no caso de uma consulta ao clicar no botão, acesso um arquivo em PHP que monta um xml e eu pego os dados e insiro os valores nos inputs. Neste caso, como eu faria em PHP?), abertura de popups e trazer os dados selecionados para a página mãe, etc.

 

Neste caso, o PHP não poderia me ajudar, correto?

 

 

 

Então esta é a tua falha: 'deixar o trabalho pesado', para uma linguagem que roda no cliente.

 

Oque você pode fazer, é 'critografar' o código Javascript.. deixando ele 'ilegível' para os humanos.. removendo espaços, comentários, quebras de linha.. Alguns sites por ai, fazem essa 'compressão', e até reescrevem trechos do teu código 'complicando ele'.

 

E se o usuário estiver navegando sem suporte à Javascript ?

é possível desabilitar facilmente.. toda a tua aplicação estará comprometida, por você ter a projetado de maneira tão fraca.

 

 

Conhece o FireBUG é um complemento bem legal do Firefox, muitos já cairam, e ainda continuarão a cair, se projetarem sistemas dessa forma. Uma história que vi, foi até que andaram hackeando o joguinho do Orkut (Colheita Feliz), porque ele é fortemente escrito em JS.

 

Deixe o trabalho delicado, para o servidor resolver. Linguagens server-side são muito mais confiáveis e seguras, se você escrever de forma correta.

 

Javascript tem o seu lugar de destaque, mas é preciso tomar cuidado e saber usar. Eu mesmo tive a oportunidade de reescrever um site de um escritório de advogacia, em que o painel administrativo era tão tosco, e mal escrito.. que com alguns truques, eu invadi o sistema falho de login em AJAX, sem nem saber usuário, senha de nada.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem esse codigo aqui pra CRIPTOGRAFIA DE JAVASCRIPT

 

.::DA UMA OLHADINHA::.

 

CRIPTOGRAFA.HTML

 

<html>
<head>
<title>Criptografia</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<script language="javascript">
function Encripta(dados){
	var mensx="";
	var l;
	var i;
	var j=0;
	var ch;
	ch = "assbdFbdpdPdpfPdAAdpeoseslsQQEcDDldiVVkadiedkdkLLnm";	
	for (i=0;i<dados.length; i++){
		j++;
		l=(Asc(dados.substr(i,1))+(Asc(ch.substr(j,1))));
		if (j==50){
			j=1;
		}
		if (l>255){
			l-=256;
		}
		mensx+=(Chr(l));
	}
	document.getElementById("1").value=mensx;
}
function Descripta(dados){
	var mensx="";
	var l;
	var i;
	var j=0;
	var ch;
	ch = "assbdFbdpdPdpfPdAAdpeoseslsQQEcDDldiVVkadiedkdkLLnm";	
	for (i=0; i<dados.length;i++){
		j++;
		l=(Asc(dados.substr(i,1))-(Asc(ch.substr(j,1))));
		if (j==50){
			j=1;
		}
		if (l<0){
			l+=256;
		}
		mensx+=(Chr(l));
	}	
	document.getElementById("2").value=mensx;
}
function Asc(String){
	return String.charCodeAt(0);
}

function Chr(AsciiNum){
	return String.fromCharCode(AsciiNum)
}
</script>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="center">Dado a ser criptografado </td>
    <td align="center">Criptografia</td>
    <td align="center">Descriptografia</td>
  </tr>
  <tr>
    <td align="center"><textarea name="1" id="0" rows="5" onKeyPress="return enter(event, this);"></textarea></td>
    <td align="center"><textarea name="2" id="1" rows="5" onKeyPress="return enter(event, this);"></textarea></td>
    <td align="center"><textarea name="3" id="2" rows="5" onKeyPress="return enter(event, this);"></textarea></td>
  </tr>
</table>
<div align="center"><br />
  <br />
  <input type="button" value="Limpar Campos" onClick="limpar();"/>
    <script language="javascript">
document.getElementById("0").focus();
function enter(event, envia){
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13){
		var dados=document.getElementById(envia.id);
		var next=(parseInt(envia.id)+1);
		if(dados.value.lenght<=0){
			return false;
		}else{
			if (envia.id==0){
				Encripta(dados.value);
				document.getElementById(next).focus();
			}else if(envia.id==1){
				Descripta(dados.value);
				document.getElementById(next).focus();
			}else{
				limpar();
			}
			return false;
		}
	}else{
		return true;
	}
}
function limpar(){
	for (var i=0; i<3;i++){
		document.getElementById(i).value="";
	}
	document.getElementById(0).focus();
}
  </script>
</div>
</body>
</html>
http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso, o modo correto de se fazer é uma 'revalidação'.

 

Depois de tudo, ao dar o SUBMIT, você faz uma validação que use SÓ php, entendeu ?

Uma metodologia interessante de desenvolvimento, diz que primeiro fazemos o sistema funcionar.. sem nenhum efeito ou firula, seco. Com validação server-side*, e tudo mais. E depois você adicionar Javascript, e não o contrário.

 

-> 'Esconder o código fonte' não é algo possível.

-> Validar somente no lado do cliente é uma falha grave.

 

Se você precisa fazer dessa forma, faça.. mas não se esqueça de fazer também outra validação para o caso dessa falhar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William,

 

Meu sistema funciona assim:

 

Primeiro tenho uma interface HTML onde se encontra meu código javascript (onde utilizo o JQUERY). Para as validações de campos, ações sobre objetos, etc, eu o aciono. Ao clicar em submit, tenho uma página em PHP onde realizo a validação (tipo, verifico se o registro já não existe no banco de dados para determinar se trata de uma inclusão ou alteração e valido dados críticos também).

 

No caso, se eu trabalhar com sessão para validar o valor que está no meu campo input com o valor da sessão em PHP também funcionaria como validação, correto?

 

 

No caso, o modo correto de se fazer é uma 'revalidação'.

 

Depois de tudo, ao dar o SUBMIT, você faz uma validação que use SÓ php, entendeu ?

Uma metodologia interessante de desenvolvimento, diz que primeiro fazemos o sistema funcionar.. sem nenhum efeito ou firula, seco. Com validação client-side, e tudo mais. E depois você adicionar Javascript, e não o contrário.

 

-> 'Esconder o código fonte' não é algo possível.

-> Validar somente no lado do cliente é uma falha grave.

 

Se você precisa fazer dessa forma, faça.. mas não se esqueça de fazer também outra validação para o caso dessa falhar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O MELHOR É CRIPTOGRAFIA MESMO MEU CARO.... OU ENTÃO MOSTRAR A SUA MSG NÃO COM JAVASCRIPT E SIM PHP.... http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif http://forum.imasters.com.br/public/style_emoticons/default/excl.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

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.