AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 58822
Accepted
jpmc26
jpmc26
Asked: 2014-02-13 21:17:37 +0800 CST2014-02-13 21:17:37 +0800 CST 2014-02-13 21:17:37 +0800 CST

Como posso me proteger contra a injeção de SQL onde a parametrização da minha consulta não é uma opção?

  • 772

Estou trabalhando com o módulo arcpy da ESRI e preciso especificar uma WHEREcláusula como parâmetro para esta função . Como o resultado será eventualmente usado para recuperar dados do banco de dados, o texto da WHEREcláusula é passado diretamente para o banco de dados em algum momento, mas, infelizmente, o ESRI não me dá nenhuma opção para parametrizar a consulta. Como quero me proteger contra uma possível injeção de SQL, preciso encontrar algum meio alternativo de proteger meu banco de dados.

Uma opção que vem à mente é limitar a entrada e lançar um erro antes dessa chamada de função se ela não estiver em conformidade. No meu caso, os chamadores precisarão apenas de caracteres alfanuméricos ASCII. Nenhum outro tipo de caractere é permitido na coluna a ser usada para filtragem. Limitar o usuário a apenas caracteres alfanuméricos seria suficiente para impedir a injeção de SQL, especialmente porque o texto deve ser citado como uma string?

parameter sql-injection
  • 3 3 respostas
  • 769 Views

3 respostas

  • Voted
  1. Best Answer
    elixenide
    2014-02-14T00:40:20+08:002014-02-14T00:40:20+08:00

    Se você realmente pode limitar a caracteres alfanuméricos, então sim, tudo bem, SE você estiver limitando a caracteres alfanuméricos ANSI. Em Unicode, como cada caractere tem mais de um byte, muitas representações de caracteres alfanuméricos são realmente inseguras e podem levar à injeção.

    Você precisará limpar os dados do lado do servidor e garantir que a codificação seja segura. Eu sugiro que você dê uma olhada nas bibliotecas ESAPI da OWASP para saber como elas fazem isso (consulte a terceira seção nesta página ).

    • 2
  2. Allan S. Hansen
    2014-02-13T22:55:49+08:002014-02-13T22:55:49+08:00

    A maneira normal é garantir que as várias palavras-chave do SQL não sejam permitidas na string digitada pelo usuário. No entanto, existem muitos casos para verificar.

    Citações podem ser evitadas por algo como isto:

    SELECT  CHAR(97) + CHAR(100) + CHAR(109) + CHAR(105) + CHAR(110)
    

    Retorna admin e a técnica de adicionar caracteres dessa maneira pode ser usada em WHERE sem a necessidade de usar aspas.

    Então, basicamente - você terá que criar sua consulta e, antes de enviá-la ao banco de dados, verifique se ela não está fazendo nada que você não deseja, comparando-a com as palavras-chave SQL, mas há um bom número de coisas checar. Portanto, certifique-se de que itens como select, exec (todas as variações), convert, union, drop, truncate e praticamente todas as palavras-chave perigosas em qualquer combinação de maiúsculas/minúsculas, assim por diante, não estejam na string do usuário. Também não deve ser permitido nenhum fluxo de bytes (números 0x) que possam ser convertidos para evitar muitas verificações de dicionário, especialmente se os comandos exec forem esquecidos do dicionário.

    E se for um aplicativo da web, certifique-se de verificar este lado do servidor e não do lado do cliente.

    É praticamente o melhor conselho que posso dar se você não puder usar parâmetros.

    • 1
  3. Colin 't Hart
    2014-02-14T01:34:42+08:002014-02-14T01:34:42+08:00

    Se estiver usando o Oracle - e se você for capaz de executar instruções arbitrárias nele - então você pode primeiro limpar a entrada usando dbms_assert.enquote_literal(pelo menos, é meu entendimento que isso garante que o literal seja citado corretamente - mesmo permitindo as aspas embutido em strings).

    Consulte http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_assert.htm para obter mais detalhes.

    • 1

relate perguntas

  • Os formatos de data devem ser especificados nas instruções SQL?

  • Colocar aspas simples em torno de constantes numéricas realmente protege contra injeção de SQL no MySQL?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve