Pergunta

Eu estou olhando para inspecionar instruções SQL no código Java / jdbc para garantir que o SQL para ser executado é de qualidade aceitável. Nem PMD não Findbugs parece ter JDBC ou regras SQL. Eu poderia usar p6spy para registrar o SQL e olhar para esse caminho, mas este é manual.

Eu estou querendo saber se a estratégia de de usar PMD / Findbugs / etc para criar uma regra que qualquer string passado para PreparedStatement onde há um "=" ou "in" só vars parametrizada do lado comparar.

Alguém já fez isso? Ou feito isso por outros meios?

Foi útil?

Solução

Este é um problema complicado. Os operadores de comparação como = e IN() alguns casos, mas há também:. != <> < <= > >= LIKE

Como você detectar casos de interpolação variáveis ??de aplicativo como literais em expressões?

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

Você pode procurar SQL contendo delimitadores de cadeia, mas a injeção de SQL não vem apenas de interpolação strings literais.

Como você detectar casos de interpolação variáveis ??de aplicativo como outros do que os valores de dados coisas?

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

Eu não conheço nenhuma maneira automática para detectar falhas de injeção SQL. Código revisão é uma maneira mais eficaz para identificá-los. Em cada instrução SQL que contém variáveis ??de aplicativo interpolados, você precisará confirmar que as variáveis ??de aplicativo são "seguros" e que a sua aplicação validou-los explicitamente ou transformado los para que eles não contêm carga perigosa.

Outras dicas

Você tem a capacidade de testar completamente o aplicativo com um depurador conectado a ele?

Definir um ponto de interrupção na implementação do seu driver JDBC de Connection.createStatement () e executar o aplicativo ... (ou se estiver usando um driver para o qual você não tem o código-fonte, escrever um driver falso que apenas delega chamadas para o real, e registrar todas as ocorrências de createStatement ())

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top