Ir para conteúdo
View in the app

A better way to browse. Learn more.

Portal do Host

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Postado

Abaixo segue um Código que parace seguro até que o conheça e faça valer o contrário.

<?php

include("conexao.php");

$login = "admin";

$senha = "********";

$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";

$busca = "SELECT * FROM tabelaLogin WHERE login = 'admin' OR 1 and senha = '********'";

// ateh aqui pode se observar que esta tudo ok

// o autenticacao vai acontecer normalmente pois foi fornecido o login e a senha de forma correta

//-------------------------------------------------------------------------------------------------------------------------

// mais digamos que eu nao tenha a senha e use o login = "admin" entao eu ja tenho 50 porcento de chance e

// agora soh falta advinhar a senha certo ?

// R: ERRADO se o site esta vuneravel a Injecao SQL eu praticamente ja tenho 100 porcento.

$login = "admin";

$senha = "' or '1=1";

$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";

$busca = "SELECT * FROM tabelaLogin WHERE login = 'admin' OR 1 and senha = '' or '1=1'";

// por Logica o que se pode observar eh admin E nada OU 1 = true

// V E F OU V = V

// a busca vai retorna verdadeiro o seja Logado como ADMIN

// isso para facil porque ja tem o login = admin, na verdade login nem eh necessario

$login = "' or '1=1";

$senha = "' or '1=1";

$busca = "SELECT * FROM tabelaLogin WHERE login = '$login' OR 1 and senha = '$senha'";

$busca = "SELECT * FROM tabelaLogin WHERE login = '' or '1=1' OR 1 and senha = '' or '1=1'";

// por logica denovo nada OU 1 E nada OU 1 = true

// F OU V E F OU V = V

// denovo Logado sem a necessidade de nenhum dado de acesso

//-------------------------------------------------------------------------------------------------------------------------

Uma forma bastante que ajuda eh limitar no formulario o tamanho dos campos Login e Senha

Outra maneira que realmente funciona eh filtrar todos dados retirando aspas simples, duplas, espacos em branco

barras e tudo que nao seja digito e numero antes de inseri-los em uma busca sql.

// retira os codigos html do login e retira as aspa simples

$login = str_replace("'","",strip_tags($login));

// retira os codigos html da senha, retira as aspa simplese criptografa antes de compara-la no banco de dandos

$senha = crypt(str_replace("'","",strip_tags($senha)));

//Agora sim pode se dizer que o codigo esta um pouco seguro

Feito pela PhpBrasil


Postado

Eu uso assim:

foreach($_POST as $key => $value){


  $_POST[$key] = strip_tags(addslashes($value));


}

Com POST e GET.


Postado

Pra que toda esta gambiarra? Use prepared statements (PDO, mysqli) e pronto.


Postado

Bacana tuas dicas Rodrigo,

Injection é um problema muito sério que está ocorrendo hoje, como XSS também que é um técnica de injeção de cros-site-scripting.

Criar um sistema que seja resistente a essas técnicas não é uma tarefa fácil, não é somente usando


strip_tags()

mysql_real_escape_string()

...

.

Eu quando prestando consultoria em desenvolvimento utilizo ou aconcelho a utilização de um Framework, seja PHP, Python, Ruby e mais, os frameworks já vem praparados pra essas situações, precisando apenas ligar/desligar.

Como a maioria aqui desenvolve PHP segue uma dica de framework http://codeigniter.com/ tem uma curva de aprendizado muito curta e oferece recursos fantásticos.

Fica a dica.....


Postado

Todas essas funções acabam modificando o que é inserido, francamente, usar str_replace ou strip_tags é um absurdo. O código abaixo preserva totalmente o que é inserido.


function anti_sql_injection($str) {

	if (!is_numeric($str)) {

		$str = get_magic_quotes_gpc() ? stripslashes($str) : $str;

		$str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str);

	}

	return $str;

}

ai é só chamar a função, exemplo

$form_nome = anti_sql_injection($_POST['nome']);

E se o valor for em números

$form_cpf = (INT)$_POST['cpf'];




Postado

É uma ótima dica, más o mod_security faz este serviço para mim :-)


Postado

O magic_quotes está deprecado, ou seja, não recomendo utilizar essa função.

recomenda alguma em para substituir ela?



Postado

Apenas mysql_real_escape_string()

então eh soh fazer isso:

$senha = mysql_real_scape_string($senha);

$usuario = mysql_real_scape_string($usuario);

?


Visitante
Este tópico está impedido de receber novos posts.

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Informação Importante

Concorda com os nossos termos?

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.