SQL injection via user-controlled input

ID

vbnet.inject.sql_injection

Severity

high

Remediation Complexity

medium

Remediation Risk

medium

Remediation Effort

medium

Resource

Inject

Language

VB.NET

Description

User-controlled input flows into a SQL statement without parameterization, which may allow SQL injection. Use parameterized queries (SqlParameter / command.Parameters) instead of building SQL by string concatenation.

Rationale

User-controlled input flows into a SQL statement without parameterization, which may allow SQL injection. Use parameterized queries (SqlParameter / command.Parameters) instead of building SQL by string concatenation.

The following code illustrates a vulnerable pattern detected by this rule:

Public Sub QueryStringToSqlCommand(ByVal Request As HttpRequest)
    Dim id As String = Request.QueryString("id")
    ' VULNERABLE: SQL injection via user-controlled input
    Dim cmd As New SqlCommand("SELECT * FROM users WHERE id = " & id, conn)
    cmd.ExecuteReader()
End Sub

Remediation

Follow secure coding practices and review the references below for detailed remediation guidance.

Configuration

This detector does not need any configuration.

References

  • CWE-89

  • OWASP: A03:2021 - Injection