fddsantos Posted July 20, 2012 at 03:43 PM Report #469405 Posted July 20, 2012 at 03:43 PM Boa tarde pessoal, Gostava de fazer esta pergunta, Como posso combater os ataques de sql injection? Obrigado pela atenção, Fábio Santos Lei de Lavoisier aplicada à Informática:Na Informática nada se compra, nada se cria! Tudo se copia!
Rui Carlos Posted July 20, 2012 at 06:04 PM Report #469417 Posted July 20, 2012 at 06:04 PM Penso que a solução mais eficaz passa por usar prepared statements: http://php.net/manual/en/book.pdo.php Tens também algumas informações adicionais aqui: http://php.net/manual/en/security.database.sql-injection.php#security.database.avoiding Rui Carlos Gonçalves
mjamado Posted July 20, 2012 at 06:20 PM Report #469421 Posted July 20, 2012 at 06:20 PM Penso que a solução mais eficaz passa por usar prepared statements: http://php.net/manual/en/book.pdo.php Não é a "mais eficaz", é a única que é eficaz (tirando não se usar SQL, de todo). "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.
MoshMage Posted July 23, 2012 at 10:39 PM Report #469853 Posted July 23, 2012 at 10:39 PM mysql_real_escape_string e mysqli_real_escape_string são as funções que tu procuras. If all Else fails, use Else If;
FN9 Posted July 24, 2012 at 07:08 PM Report #470092 Posted July 24, 2012 at 07:08 PM (edited) mysql_real_escape_string e mysqli_real_escape_string são as funções que tu procuras. Aconselho a usar PDO. Estas funções não são 100% seguras Edited July 24, 2012 at 07:11 PM by FN9
MoshMage Posted July 25, 2012 at 12:38 AM Report #470173 Posted July 25, 2012 at 12:38 AM Aconselho a usar PDO. Estas funções não são 100% seguras Erm.. é certo que fui vago; mas tu também podias elaborar x) Tive agora no SO e aqui explica o "porque"; No entanto.. também existe um mysqli::prepare() portanto... qual é a grande diferença? (é uma duvida legal, só agora é que li sobre PDO - ando a fazer a minha transação para OOP aos poucos) If all Else fails, use Else If;
mjamado Posted July 25, 2012 at 10:32 AM Report #470222 Posted July 25, 2012 at 10:32 AM No entanto.. também existe um mysqli::prepare() portanto... qual é a grande diferença? Desde que uses prepared statements, como o Rui Carlos disse lá atrás, é a mesma coisa; a única diferença é que PDO é multi-motor, enquanto do MySQLi é só para esse motor. Se tiveres a certeza absoluta que o motor de DB não vai mudar ao longo do ciclo de vida do projecto, podes usar a extensão específica do motor; senão, usa PDO, que é mais fácil mudar de motor mais tarde. 1 Report "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.
MoshMage Posted July 25, 2012 at 11:54 AM Report #470229 Posted July 25, 2012 at 11:54 AM Desde que uses prepared statements, como o Rui Carlos disse lá atrás, é a mesma coisa; a única diferença é que PDO é multi-motor, enquanto do MySQLi é só para esse motor. Se tiveres a certeza absoluta que o motor de DB não vai mudar ao longo do ciclo de vida do projecto, podes usar a extensão específica do motor; senão, usa PDO, que é mais fácil mudar de motor mais tarde. Ah! Por momentos temi pela minha protecção contra SQL Injection (se bem que ainda nao actualizei para o prepared statements) Obrigado 🙂 If all Else fails, use Else If;
brunoais Posted July 26, 2012 at 11:12 AM Report #470409 Posted July 26, 2012 at 11:12 AM (edited) @mjamado O uso do cast (int, float, etc... mas não string (n sei se há mais nesta categoria)) tb torna o dado completamente seguro para meter na DB. Claro que estes que indiquei é limitado a números Edited July 26, 2012 at 11:12 AM by brunoais "[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 July 26, 2012 at 12:07 PM Report #470434 Posted July 26, 2012 at 12:07 PM Claro que estes que indiquei é limitado a números Generalidades vs. especificidades. "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.
yoda Posted July 26, 2012 at 04:19 PM Report #470457 Posted July 26, 2012 at 04:19 PM (edited) Claro que estes que indiquei é limitado a números Para quem precisar : return (is_int($string) && $string >= 0) || ctype_digit($string); Edited July 26, 2012 at 04:19 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
brunoais Posted July 27, 2012 at 01:21 PM Report #470636 Posted July 27, 2012 at 01:21 PM (edited) Para quem precisar : return (is_int($string) && $string >= 0) || ctype_digit($string); Pq a parte: $string >= 0 ? De qq modo, eu n uso isso. Se se trata de dados que eu estou à espera que seja exclusivamente números inteiros uso diretamente o cast. Edited July 27, 2012 at 01:23 PM by brunoais "[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%.
yoda Posted July 29, 2012 at 02:19 AM Report #470842 Posted July 29, 2012 at 02:19 AM Pq a parte: $string >= 0 ? De qq modo, eu n uso isso. Se se trata de dados que eu estou à espera que seja exclusivamente números inteiros uso diretamente o cast. Essa parte ficou a mais, não reparei. Uso-a porque é bastante comum usar essa condição para verificar ID's. Quando trabalhas com comandos que são inseridos pelo utilizador é melhor filtrar bem o input e condicionar o uso da aplicação àquilo que é o seu propósito, caso contrário torna-se mais fácil sofrer um ataque no site. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
taviroquai Posted July 29, 2012 at 09:39 PM Report #470885 Posted July 29, 2012 at 09:39 PM Se o input for inválido (basta um parametro invalído), se possível, a aplicação nem devia chegar a efectuar a ligação à base de dados e devolver logo o erro, tentando efectuar o minimo de instruções, incluir o mínimo de ficheiros e consumir o minimo de recursos do sistema... mas nem sempre é possivel...
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