-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add files via upload #9
base: develop
Are you sure you want to change the base?
Conversation
|
||
|
||
try (Connection connection = dataSource.getConnection()) { | ||
String checkUserQuery = "select userid from sql_challenge_users where userid = '" + username_reg + "'"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
User data flows into this manually-constructed SQL string. User data can be safely inserted into SQL strings using prepared statements or an object-relational mapper (ORM). Manually-constructed SQL strings is a possible indicator of SQL injection, which could let an attacker steal or manipulate data from the database. Instead, use prepared statements (connection.PreparedStatement
) or a safe library.
View Dataflow Graph
flowchart LR
classDef invis fill:white, stroke: none
classDef default fill:#e7f5ff, color:#1c7fd6, stroke: none
subgraph File0["<b>src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java</b>"]
direction LR
%% Source
subgraph Source
direction LR
v0("<b>[Line: 56]</b> username_reg")
end
%% Intermediate
subgraph Traces0[Traces]
direction TB
v2("<b>[Line: 56]</b> username_reg")
end
%% Sink
subgraph Sink
direction LR
v1("<b>[Line: 63]</b> #quot;select userid from sql_challenge_users where userid = #apos;#quot; + username_reg + #quot;#apos;#quot;")
end
end
%% Class Assignment
Source:::invis
Sink:::invis
Traces0:::invis
File0:::invis
%% Connections
Source --> Traces0
Traces0 --> Sink
%% Clickable
click v0 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L56" "View in source" _blank
click v1 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L63" "View in source" _blank
click v2 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L56" "View in source" _blank
try (Connection connection = dataSource.getConnection()) { | ||
String checkUserQuery = "select userid from sql_challenge_users where userid = '" + username_reg + "'"; | ||
Statement statement = connection.createStatement(); | ||
ResultSet resultSet = statement.executeQuery(checkUserQuery); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Detected a formatted string in a SQL statement. This could lead to SQL injection if variables in the SQL statement are not properly sanitized. Use a prepared statements (java.sql.PreparedStatement) instead. You can obtain a PreparedStatement using 'connection.prepareStatement'.
View Dataflow Graph
flowchart LR
classDef invis fill:white, stroke: none
classDef default fill:#e7f5ff, color:#1c7fd6, stroke: none
subgraph File0["<b>src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java</b>"]
direction LR
%% Source
subgraph Source
direction LR
v0("<b>[Line: 63]</b> username_reg")
end
%% Intermediate
subgraph Traces0[Traces]
direction TB
v2("<b>[Line: 63]</b> checkUserQuery")
end
%% Sink
subgraph Sink
direction LR
v1("<b>[Line: 65]</b> statement.executeQuery(checkUserQuery)")
end
end
%% Class Assignment
Source:::invis
Sink:::invis
Traces0:::invis
File0:::invis
%% Connections
Source --> Traces0
Traces0 --> Sink
%% Clickable
click v0 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L63" "View in source" _blank
click v1 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L65" "View in source" _blank
click v2 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L63" "View in source" _blank
try (Connection connection = dataSource.getConnection()) { | ||
String checkUserQuery = "select userid from sql_challenge_users where userid = '" + username_reg + "'"; | ||
Statement statement = connection.createStatement(); | ||
ResultSet resultSet = statement.executeQuery(checkUserQuery); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Untrusted input might be used to build a database query, which can lead to a SQL injection vulnerability. An attacker can execute malicious SQL statements and gain unauthorized access to sensitive data, modify, delete data, or execute arbitrary system commands. To prevent this vulnerability, use prepared statements that do not concatenate user-controllable strings and use parameterized queries where SQL commands and user data are strictly separated. Also, consider using an object-relational (ORM) framework to operate with safer abstractions. To build SQL queries safely in Java, it is possible to adopt prepared statements by using the java.sql.PreparedStatement
class with bind variables.
View Dataflow Graph
flowchart LR
classDef invis fill:white, stroke: none
classDef default fill:#e7f5ff, color:#1c7fd6, stroke: none
subgraph File0["<b>src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java</b>"]
direction LR
%% Source
subgraph Source
direction LR
v0("<b>[Line: 56]</b> username_reg")
end
%% Intermediate
subgraph Traces0[Traces]
direction TB
v2("<b>[Line: 56]</b> username_reg")
v3("<b>[Line: 63]</b> checkUserQuery")
end
v2 --> v3
%% Sink
subgraph Sink
direction LR
v1("<b>[Line: 65]</b> statement.executeQuery(checkUserQuery)")
end
end
%% Class Assignment
Source:::invis
Sink:::invis
Traces0:::invis
File0:::invis
%% Connections
Source --> Traces0
Traces0 --> Sink
%% Clickable
click v0 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L56" "View in source" _blank
click v1 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L65" "View in source" _blank
click v2 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L56" "View in source" _blank
click v3 href "https://github.com/sinat101/WebGoat/blob/cf59bb29fc11993c328a08599acae47537e7af8d/src/main/java/org/owasp/webgoat/lessons/sqlinjection/advanced/test_SqlInjectionChallenge.java#L63" "View in source" _blank
Thank you for submitting a pull request to the WebGoat!