Jump to content


Photo

Segurança Em Formulários E Posts


  • Faça o login para participar
6 replies to this topic

#1 Howdy

Howdy

    Turista

  • Usuários
  • 30 posts
  • Sexo:Não informado

Posted 13/11/2009, 21:04

opa

eu li alguma coisa sobre inject, então estou protegendo meus posts assim:

$dbpg = sprintf(NEGOCIOS, mysql_real_escape_string($_POST['empresa']));

também tenho GET para uma espécie de query string:

$empresat = mysql_real_escape_string($_GET['valor']);
if (isset($empresat)) { 
	$_POST['vt'] = mysql_real_escape_string($empresat);
}

eu uso formulários, select e outros mas todos estão nesse formato
recomendariam mais precauções? eu não sei se posso acabar abrindo espaço pra algum XSS ou inject não achei nenhum artigo, também habilitei o recaptcha para registros

até mesmo para aqueles scripts que usam ajax para editar uma tabela ao clicar ficariam seguros simplesmente usando o mysql real escape? parece fácil demais
obrigado

#2 dezon

dezon

    Turista

  • Usuários
  • 26 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 14/11/2009, 14:20

howdy, não se posso chamar de recomendação mas uma coisa que eu sempre uso nos códigos de Forms é o
$login = addslashes($_POST['login'])
, porque esse ajuda a prevenir sql injection com campos de formulários.

abraços
Meu site, meu portfolio, meu currículum :: JV-DEV
Kadosh, Kadosh, Shalom Adonai, Ani Ohev Otchá!!!!!!

#3 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 14/11/2009, 14:43

howdy, não se posso chamar de recomendação mas uma coisa que eu sempre uso nos códigos de Forms é o

$login = addslashes($_POST['login'])
, porque esse ajuda a prevenir sql injection com campos de formulários.

abraços

Se você for enviar estas informações para o MySQL/PostgreSQL, isso pouco pode adiantar. Veja o que o manual diz:

It's highly recommeneded to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using does't have an escape function and the DBMS uses \ to escape special chars, you can use this function.

No que diz respeito ao banco de dados eu uso e recomendo prepared statements da biblioteca PDO. Eis a página de documentação: http://docs.php.net/...pdo.prepare.php

No caso de XSS são muitas coisas a serem consideradas. Os guias da Open Web Application Security Project - OWASP são ótimas fontes - eis alguns deles:[]’sAté mais

#4 Howdy

Howdy

    Turista

  • Usuários
  • 30 posts
  • Sexo:Não informado

Posted 14/11/2009, 18:20

excelente, estou lendo aqui
só é complicado XSS muita coisa pra entender

#5 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 15/11/2009, 02:01

A função mysql_real_escape_string() vai te proteger contra sql injection. Mas contra XSS não vai, é aí que mora o perigo. :P

Vou te dar um exemplo...

Se você cadastrar no banco de dados a empresa utilizando mysql_real_escape_string($_POST['empresa']), vai escapar as aspas e NULLs que o usuário colocar. Isso vai evitar o sql injection. ;)

Mas, isso não vai evitar que o usuário cadastre tags html e javascript. Então, eu como usuário posso cadastrar no campo empresa da sua tabela isso aqui por exemplo:

<script>alert('vulnerável');</script>

Na hora que você estiver no seu painel de controle e abrir o meu cadastro, é capaz que esse script seja rodado. Por quê eu disse que é capaz? Porque vai depender de como você está exibindo o valor do campo empresa. A falha parece bobinha, mas eu posso até roubar a sua sessão utilizando javascript, assim eu poderia acessar seu painel de controle sem ter digitado senha nenhuma.

O que deve ser feito é não deixar que os caracteres especiais sejam exibidos. Ou você converte os caracteres especiais com htmlspecialchars() na hora do cadastro ou na hora de recuperar os dados do banco de dados.

Só que é bom lembrar que cada campo é um caso. Num campo empresa por exemplo, os únicos caracteres que me interessam são as letras. Logo no cadastro eu colocaria uma expressão regular que verificaria os caracteres, se o usuário colocasse outros caracteres que não fossem letras, ele receberia uma mensagem de erro dizendo que ele colocou caracteres inválidos.

Quando você pretende permitir o cadastro de qualquer tipo de caractere num campo, até que não tem problema não converter os caracteres especiais na hora do cadastro. Você pode deixar para converter na hora de recuperar os dados para exibir. Mas por que não converter na hora do cadastro? Como eu disse, cada campo é um caso, às vezes a gente define um tamanho exato para um campo (ex.: VARCHAR 20), se convertesse os caracteres especiais já no cadastro, duas aspas por exemplo ocupariam o espaço de 12 caracteres (duas aspas convertidas com htmlspecialchars() vira &quot;&quot;).

Nossa, como eu escrevi... :lol:

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#6 Squall Robert

Squall Robert

    Mr. Squall - Mais Carne do que Osso (hihi)

  • Usuários
  • 507 posts
  • Sexo:Masculino
  • Localidade:Curitiba
  • Interesses:Php ... Php...Php

Posted 16/11/2009, 15:53

olá....

no caso que nosso amigo falou do campo empresa, existe maneiras de se tratar essas informações
ex\:


o campos empresa , vai reserver o nome da empresa certo... esse campo nao tem por que ter tags nele...
então se colocar tags nele certamente coisa boa não é.

neste caso vc pode usar

strip_tags($var);

que detona se aguém colocar tags no codigo.

mas existe outras maneiras de tratar estas infromações.....
<?php

$squall = new Squall();

$squall->Ajudando("você");

$resultado = $squall->solucao();  ?>

#7 kdz

kdz

    Normal

  • Usuários
  • 72 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro - RJ

Posted 17/11/2009, 02:55

Filtrar entrada e Tratar saída, você precisa disso para ser feliz :)

Estou postando uma apostila que tenho aqui a bastante tempo, é um pouco superficial mas dá pra ter uma noção do que se deve fazer.

Attached Files






1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq