Query Injection

4D Component which includes methods to help your web developing.

Query Injection

Provision

Discussion

For example, when the querying a user code (for login) is like follow,

$userSelection_o:=ds.User.query("loginname = '"+$loginname_t+"' & password = '"+$password_t+"'")
$authenticated_b:=(userSelection_o.length=1)

attacker can give victimName' | loginname = ' for login name and empty string for password parameter.

Then the query sentence becomes:

$userSelection_o:=ds.User.query("loginname = 'victimName' | loginname = '' & password = ''")

The result is, a user whose login name is “victimName” will be loaded even though the password is not given.

To avoid this vulnerablity, the code should look like:

$userSelection_o:=ds.User.query("loginname === :1"; $loginname_t)
Case of
  :($userSelection_o#Null)
  :($userSelection_o.length=0)
  Else
    $userEntity_o:=$userSelection_o.first()
    $authenticated_b:=Verify password hash($password_t; $userEntity_o.password)
End case

Note:

Return to index