Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Anti SqlInjection e tags html
PHP
-
-
-
-
function anti_injection($sql)
-
-
//modo de usar pegando dados vindos do formulario
-
$nome = anti_injection($_POST["nome"]);
-
$senha = anti_injection($_POST["senha"]);
-
-
?>
é possivel se realizar um sql-injection atravez de cookies?
para escapar aspas você pode usar mysql_escape_string()
e sobre cookie nao porque o cookie é uma informação salva no micro do cliente
e é usado para posterior leitura dele, guardar informações e fazer logins etc...
nao tem sentido nem logica o cookie fazer uma sql injection , o sql injection é uma sintaxe sql feita no banco de dados para executar tarefas nao esperadas como listar os usuarios e senhas, apagar registros etc... resumindo o sql injection
é apenas uns comandos sql pedindo pra executar algo e se seu sistema deixar passar ele executa ,por isso previna-se contra esses ataques estude sobre sql injection e php injection
Muita gente tem certo receio sobre cookies, mas lembrando ele só pode ser lido pelo servidor onde foi criado...então não faz sentido alguem criar um cookie e faça um sql injection no seu próprio sistema...e bem interesante a o metodo do fabyo para evitar esse tipo de ataque, pena que poucos lembram desse tipo de cuidado tão simples...abraçosMarcio
Só lembrando que tem programas que consegue roubar os cookies, é o caso que andou acontecendo no orkut esses tempo atraz mas depende muito da sua propria segurança
mto bom vlw.
Bacana... eu uso a função addslashes para esse tipo de coisa, mas vou testar a sua para ver qual é a melhor!
E aí?qual é a melhor?Eu também só uso addslashes para evitar o sql injection, o resto também uso, mas já depende do que eu quero deixar que seja possível fazer.
PHP
[]preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\|--|\\\\)/"),"",$sql);
Nunca usei foi isso, acho que com o addslashes nenhum código SQL funcionaria ou estou errado, pelo menos na minha máquina eu já experimentei e nunca deu para fazer o sql injection.
pow, essa linha 6eu naum entendi praticamente nada... uahuahuaha poderia soh dar uma explicadinha??? faloww...
legal fabyo, soh uma coisinha, acho q mta gente c enrrolo com a funcao sql_regcase(), bom eu mesmo n conhecia ela :P/> , mas tipo, ela soh faz gerar o regexp pra maiusculos e minusculos, oq eu achei desnescessario nesse caso, vendo q você poderia terminar o regexp com um /i
o comando na minha opiniao devia ficar assim (pra simplificar):
<!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css">
[*]preg_replace("/<span style=' color: green;'>(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/i"</span>,"",$sql);
<!--php2--></div><!--ephp2-->
acho q ja facilita pra galera entende (me corrija c eu estiver errado)
flw
é ta certo tbm ,mas é bom o pessoal conhecer varias funções novas, dai nao fica só na mesma, mas valeu
olha, eu não entendo muita coisa sobre o Php e estou sofrendo com vários problemas por não ter anti sql-injection... gostaria de saber aonde inserir o script para que possa me proteger...agradeço desde já!
exemplo :
$dados = anti_injection($_POST["dados"]);
só usar a função quando você recebe os dados do formulario
se tiver mais duvidas posta ai
Fabyo, tipo, pra uso em GET e POST, eu acho q sua funcao deveria sofrer uma alteracao, vo da uma sugestao aki, depois você comenta, eu deixaria sua funcao assim:
<!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css">
[*]<?
[*]
[*]function anti_injection<span style=' color: green;'>($sql, $formUse = true)</span>
[*]{
[*]<span style=' color: DarkGray;'>// remove palavras que contenham sintaxe sql</span>
[*]$sql = preg_replace("/<span style=' color: green;'>(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/i"</span>,"",$sql);
[*]$sql = trim<span style=' color: green;'><span style=' color: green;'><span style=' color: green;'>($sql)</span></span></span>;<span style=' color: DarkGray;'>//limpa espaços vazio</span>
[*]$sql = strip_tags<span style=' color: green;'><span style=' color: green;'><span style=' color: green;'>($sql)</span></span></span>;<span style=' color: DarkGray;'>//tira tags html e php</span>
[*]if(!$formUse || !get_magic_quotes_gpc<span style=' color: green;'>()</span>)
[*] $sql = addslashes<span style=' color: green;'><span style=' color: green;'><span style=' color: green;'>($sql)</span></span></span>;<span style=' color: DarkGray;'>//Adiciona barras invertidas a uma string</span>
[*]return $sql;
[*]}
[*]
[*]<span style=' color: DarkGray;'>//modo de usar pegando dados vindos do formulario</span>
[*]$nome = anti_injection<span style=' color: green;'>($_POST["nome"])</span>;
[*]$senha = anti_injection<span style=' color: green;'>($_POST["senha"])</span>;
[*]
[*]?>
<!--php2--></div><!--ephp2-->
dessa forma, ele soh da addslashes c o magic_quotes nao estiver on, pq c estiver, você acaba espacando 2 vezes barras... e eu tb adicionei um parametro na funcao, pra dizer c ta usando em dados vindos de formulario (get, post...), q por padrao eh true, c a pessoa pode mandar esse argumento como falso para forcar o addslashes
posta ai oq você acho da ideia ;)/>
Por favor como eu faço pra usar este script onde?no meu site hospedado em localhost, hackers usam paginas do meu site pra entrar no banco de dados SQL e alterar deletar etc os dados o que fazer pra proteger essas paginas?
Eu uso o htmlentities$nome = htmlentities($nome,ENT_QUOTES,'UTF-8');Ele transforma tudo o q precisar em entidades HTML, ou seja, " vira "e; e por ae vai, para uma coisa como um Mural, ou um comentario, fica perfeito, pq a pessoa pode escrever <b> q ele vai tranformar em <b>Claro, no caso de um Login e senha, um ereg_replace() seria o melhor.
Flybybetto nao fica bom usar esse esquema pra usar num select esse esquema se usa mais em postagens, você tem que entender sobre sql injection pra saber do que se trata , por exemplo um usuario mal intensionado pode injetar codigos maliciosos no seu banco de dados ou ate deletar ele e mesmo você usando assim nao ira impedir nada
e outra coisa usando preg_replace eh muito mais rapido que ereg_replace() e uma funçao para passar o select com mais segurança eh usar mysql_escape_string()Mas porque não irá adiantar? Se os caracteres utilizados em SQLInjection serão convertidos para HTML entities?Exemplo: 1' OR 1='1-- Os seus caracteres ' = passariam a assumir o valor HTML.Pois creio que para fazer SQLInjection é necessário dos caracteres ' ; =.
pra começar os caracteres nao se usa isso porque nao tem logica fazer assim
ainda mais que no um sql injection nao ta so em apostrofos a pessoa pode injetar tbm um sinal de comentario e dai o banco iria ignorar tudo e aceitar so o que passar em seguida usando essa funçao pode ate funcionar mas nao deixa de ser uma gambi o correto foi o que eu falei acima use mysql_escape_string
Escapa uma string para uso com o mysql_query.
Esta função irá escapar o unescaped_string, assim será seguro coloca-la na função mysql_query().
e nao transforma o que a pessoa digitou em HTML entities , transforma dados em HTML entities serve para exibiçao na tela do usuario em modos de postagens tipo o forum mesmo
Certo, certo... Obrigado.
Eu esperimentei usar a funcao Anto SQL Injection e nao funcionou Fabyo... Eu a coloquei igual voce disse, recebendo a variavel do formulario, exemplo:
PHP
[*]
[*]$nome = anti_injection($_POST['nome']);
[*]
Quando tentava logar no sistema, ele transformava qualquer coisa que colocava tanto em nome como senha em ' A ' (sem aspas).
O que acontece?
Cola seu código completo aí pra gente dar uma olhada.
Marcos Alves
Eu nao gosto muito de usar o comando trim() no anti_injection.
Pq a propria senha do usuario pode querer colocar um espaco no comeco ou no final se ele acha mais seguro.
Mas o codigo esta muito bom
essa função que eu fiz ja ta velha e quase obsoleta, mas eu criei uma versao nova pra quebrar o galho, com o mysqli do php5 nao temos mais problemas com sql injection = )
> function anti_injection($txt){
$txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt;
return preg_replace("@(--|\#|\*|;|=)@s", "", $txt);
}
o mysql entende como comentario ', # , / / e --
e ( ; ) ele encerra uma instrução sql e começa uma nova por isso é bom remover o ponto e virgula pois podem usar ela para executar um novo comando sql ignorando o atual do script
leiam:
se usar o mysqli(Função melhorada do Mysql) nao tem mais problema só usar as funções novas do mysli para passar os dados como parametros antes de executar a query
Eu tenho fiz um sisteminha legal pra sqçinjetion ... ve se é dahora
eu tbm uso ele pra filtrar palavras com palavrao essas coisas
PHP
[*]<?
[*]function filtra($texto) {
[*]
[*]$badchar[1] = "drop";
[*]$badchar[2] = "select";
[*]$badchar[3] = "delete";
[*]$badchar[4] = "update";
[*]$badchar[5] = "insert";
[*]$badchar[6] = "alter";
[*]$badchar[7] = "destroy";
[*]$badchar[8] = "table";
[*]$badchar[9] = "database";
[*]$badchar[10] = "drop";
[*]$badchar[11] = "union";
[*]$badchar[12] = "TABLE_NAME";
[*]$badchar[13] = "1=1";
[*]$badchar[14] = 'or 1';
[*]$badchar[15] = 'exec';
[*]$badchar[16] = 'INFORMATION_SCHEMA';
[*]$badchar[17] = 'TABLE_NAME';
[*]$badchar[18] = 'like';
[*]$badchar[19] = 'COLUMNS';
[*]$badchar[20] = 'into';
[*]$badchar[21] = 'VALUES';
[*]
[*]$y = 1;
[*]$x = sizeof($badchar);
[*]while ($y <= $x) {
[*] $pos = strpos(strtolower($texto), strtolower($badchar[$y]));
[*] if ($pos !== false) {
[*] $texto = str_replace(strtolower($badchar[$y]), "", strtolower($texto));
[*] }
[*] $y++;
[*] }
[*]return $texto;
[*]}?>
pra chamar a função é
echo filtra($texto);
ve se é dahora ai
Bacana... eu uso a função addslashes para esse tipo de coisa, mas vou testar a sua para ver qual é a melhor!
PHP
$variavel = addslashes($_POST["variavel"]); Veja no manual do php sobre essa função!