nunolevezinho Posted May 30, 2012 at 09:22 AM Report #459073 Posted May 30, 2012 at 09:22 AM (edited) Boas, tenho andado a tentar arrnjar uma maneira de tentar limpar minimamenteas minhas queries para que os utilizadores nao insiram algo tao basico como : ‘ OR ’1′ = ’1 ou ‘; drop table users; Só que não estou a conseguir porque eu uso MSSQL e não existe a função mysql_real_escape_string para MSQL. Tentei usar PDO's mas também não têm o driver para MSSQL. Existe alguma outra maneira de limpar as queries minimamente? Não preciso nada de muito elaborado.. Edited May 30, 2012 at 09:24 AM by nunolevezinho
Ricardo Gonçalves Posted May 30, 2012 at 09:27 AM Report #459074 Posted May 30, 2012 at 09:27 AM boas, ve se o que tu queres não está aqui nestes exemplos : http://www.php.net/manual/pt_BR/function.mysql-real-escape-string.php cumps, Ricardo Gonçalves
MASNathan Posted May 30, 2012 at 09:28 AM Report #459076 Posted May 30, 2012 at 09:28 AM Olá, a função mysql_real_escape_string não é uma função do sql, mas sim do php! Exemplo <?php $nome = mysql_real_escape_string($_POST['nome']); $query = 'SELECT * FROM tb_users WHERE nome = ' . $nome;
nunolevezinho Posted May 30, 2012 at 09:32 AM Author Report #459077 Posted May 30, 2012 at 09:32 AM (edited) Olá, a função mysql_real_escape_string não é uma função do sql, mas sim do php! Exemplo <?php $nome = mysql_real_escape_string($_POST['nome']); $query = 'SELECT * FROM tb_users WHERE nome = ' . $nome; Então devo estar a fazer alguma coisa mal porque já experimentei isto: $var = "Mc'Donalds"; echo "Var normal: ".$var."</br>"; $var = mysql_real_escape_string($var); echo "Var protegida: ".$var; Output: Var normal: Mc'Donalds Var protegida: Edit: Tens a certeza que isso é funciona em MSSQL? Porque eu li umas coisas como: Unfortunately, as of right now, PHP mssql extension neither supports parameterized queries nor has an escape function. Edited May 30, 2012 at 09:34 AM by nunolevezinho
Ricardo Gonçalves Posted May 30, 2012 at 09:43 AM Report #459081 Posted May 30, 2012 at 09:43 AM (edited) Então devo estar a fazer alguma coisa mal porque já experimentei isto: $var = "Mc'Donalds"; echo "Var normal: ".$var."</br>"; $var = mysql_real_escape_string($var); echo "Var protegida: ".$var; Output: Var normal: Mc'Donalds Var protegida: Edit: Tens a certeza que isso é funciona em MSSQL? Porque eu li umas coisas como: Unfortunately, as of right now, PHP mssql extension neither supports parameterized queries nor has an escape function. tenta assim não sei se é a mesma coisa ou não : $var = "Mc'Donalds"; echo 'Var normal: '".$var."'</br>'; $var = mysql_real_escape_string($var); echo 'Var protegida: '.$var; Edited May 30, 2012 at 12:20 PM by brunoais geshi!
nunolevezinho Posted May 30, 2012 at 09:46 AM Author Report #459082 Posted May 30, 2012 at 09:46 AM (edited) tenta assim não sei se é a mesma coisa ou não : $var = "Mc'Donalds"; echo 'Var normal: '".$var."'</br>'; $var = mysql_real_escape_string($var); echo 'Var protegida: '.$var; Não estás a entender amigo, para usar o mysql_real_escape_string preciso de uma conecção mysql activa, mas como já disse, eu uso mssql, é diferente e por isso ela nao funciona. Por exemplo: Dá este aviso porque eu uso mssql e nao mysql. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to MySQL server on 'localhost' (10061) Entendeste? A minha duvida é se existe alguma outra função que faça algo parecido mas em mssql? Edited May 30, 2012 at 09:48 AM by nunolevezinho
Ricardo Gonçalves Posted May 30, 2012 at 09:49 AM Report #459083 Posted May 30, 2012 at 09:49 AM Tens a conexão feita á base de dados? Se não tens conexão á BD faz como está neste link: http://ajuda.uolhost.com.br/index.php?p=resposta&res=718#rmcl
nunolevezinho Posted May 30, 2012 at 09:57 AM Author Report #459086 Posted May 30, 2012 at 09:57 AM Por exemplo: Dá este aviso porque eu uso mssql e nao mysql. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to MySQL server on 'localhost' (10061) E sim tenho a ligação feita e a funcionar..
MASNathan Posted May 30, 2012 at 10:12 AM Report #459093 Posted May 30, 2012 at 10:12 AM Vê isto http://stackoverflow.com/questions/574805/how-to-escape-strings-in-mssql-using-php e se não for suficiente procura por "mysql_real_escape_string for mssql"
johnmaia Posted May 30, 2012 at 10:53 AM Report #459110 Posted May 30, 2012 at 10:53 AM http://stackoverflow.com/questions/574805/how-to-escape-strings-in-mssql-using-php 1 Report
nunolevezinho Posted May 30, 2012 at 11:46 AM Author Report #459122 Posted May 30, 2012 at 11:46 AM Vê isto http://stackoverflow...mssql-using-php e se não for suficiente procura por "mysql_real_escape_string for mssql" Eu já tinha visto esse site e não consegui implementar bem, obrigado na mesma, mas acabei por fazer uma função eu mesmo.. function mssql_escape($str) { $str= stripslashes($str); return str_replace("'", "", $str); }
MASNathan Posted May 30, 2012 at 11:49 AM Report #459123 Posted May 30, 2012 at 11:49 AM function mssql_escape($str) { $str= stripslashes($str); return str_replace("'", "", $str); } atenção podes também ter de fazer o replace ás " depende de como estás a usar o codigo
nunolevezinho Posted May 30, 2012 at 02:00 PM Author Report #459150 Posted May 30, 2012 at 02:00 PM atenção podes também ter de fazer o replace ás " depende de como estás a usar o codigo As minhas queries são do tipo: $sql_query = "SELECT * FROM tabela WHERE campo1 ='$variavel' "; No meu caso funciona certo?
MASNathan Posted May 30, 2012 at 02:09 PM Report #459155 Posted May 30, 2012 at 02:09 PM Sim... à partida não há problema
mjamado Posted May 30, 2012 at 04:31 PM Report #459209 Posted May 30, 2012 at 04:31 PM (edited) Sim... à partida não há problema Pelo contrário, à partida vai haver problemas... A protecção pelo escape é tudo menos segura. Em concreto, esse exemplo é vulnerável a ataques em UTF-8: se $variavel for "¿'; DROP TABLE tabela; #", vais ficar sem a tabela. Porquê? Porque, ao escapar a plica, vais inserir um caratere UTF-8, a saber ¿ + \ = 뽜. Podes proteger-te melhor usando as funções multibyte do PHP, mas existem ataques ainda mais complexos. Só há duas maneiras de ficares completamente protegido de ataques SQLi: não usar SQL, ou usar prepared statments. Tudo o resto é, mais tarde, ou mais cedo, objecto de ataque bem sucedido. Edited May 30, 2012 at 04:32 PM by mjamado "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.
johnmaia Posted May 30, 2012 at 04:37 PM Report #459211 Posted May 30, 2012 at 04:37 PM Lê a resposta que deram aqui: http://stackoverflow.com/questions/7216239/prevent-mssql-injection-in-php
brunoais Posted May 30, 2012 at 04:39 PM Report #459212 Posted May 30, 2012 at 04:39 PM (edited) Só há duas maneiras de ficares completamente protegido de ataques SQLi: não usar SQL, ou usar prepared statments. Tudo o resto é, mais tarde, ou mais cedo, objecto de ataque bem sucedido. Usar stored procedures ou usar prepared statements. Isso de n usar SQL acho q n é útil... Acaba por ser como no caso do computador mais protegido é aquele q está desligado. Lê a resposta que deram aqui: http://stackoverflow.com/questions/7216239/prevent-mssql-injection-in-php Qual? Edited May 30, 2012 at 04:40 PM by brunoais Um novo quote aparece.... "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
mjamado Posted May 30, 2012 at 04:58 PM Report #459223 Posted May 30, 2012 at 04:58 PM (edited) Isso de n usar SQL acho q n é útil... Acaba por ser como no caso do computador mais protegido é aquele q está desligado. Peço desculpa, esqueci-me da tabuleta: *--------* | IRONIA | *--------* || || || Edited May 30, 2012 at 04:58 PM by mjamado "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.
johnmaia Posted May 30, 2012 at 06:14 PM Report #459242 Posted May 30, 2012 at 06:14 PM (edited) Usar stored procedures ou usar prepared statements. Isso de n usar SQL acho q n é útil... Acaba por ser como no caso do computador mais protegido é aquele q está desligado. Qual? Esta por exemplo: I would suggest start using PDO. this way you could use parametrized query which will take care of almost everything for you including SQL injection plus it supports a very large RDBMS including MSSQL. Here are some of the topic to get you started. http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/ http://www.php.net/manual/en/book.pdo.php Edited May 30, 2012 at 06:15 PM by johnmaia
brunoais Posted May 30, 2012 at 09:47 PM Report #459283 Posted May 30, 2012 at 09:47 PM Esta por exemplo: Só que não estou a conseguir porque eu uso MSSQL e não existe a função mysql_real_escape_string para MSQL. Tentei usar PDO's mas também não têm o driver para MSSQL. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now