4D Component which includes methods to help your web developing.
exact match comparison operator and placeholder when building query sentense.Verify password hash command to verify password.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:
:1. You can also use querySettings parameter=== or IS) to invalidate wild card character “@”Verify password hash