You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using the DefaultFieldResolver there is the following risk:
Resolving an object through the "magic" ObjectAccess returning a property value that is callable, the resolver will call this function.
if (is_object($source) && ObjectAccess::isPropertyGettable($source, $fieldName)) {
$resolvedProperty = ObjectAccess::getProperty($source, $fieldName);
}
if (is_callable($resolvedProperty)) {
return$resolvedProperty($source, $args, $context, $info);
}
I noticed this when working with a user with firstName "Max". I do not have a specific resolver for User.
So, first the DefaultFieldResolver gets the firstName property from the User object through ObjectAccess::getProperty and assignes $resolvedProperty = 'Max'. Since Max is callable, this is executed.
This is quite risky when working with user input. Possibly only support Closures here?
The text was updated successfully, but these errors were encountered:
This is indeed risky and probably (for most people) unexpected. Limiting the call to Closure values as in the suggested PR sounds reasonable to me… does that match the intention of the DefaultFieldResolver behaviour, @johannessteu?
When using the
DefaultFieldResolver
there is the following risk:Resolving an object through the "magic" ObjectAccess returning a property value that is callable, the resolver will call this function.
I noticed this when working with a user with
firstName
"Max". I do not have a specific resolver forUser
.So, first the
DefaultFieldResolver
gets thefirstName
property from theUser
object throughObjectAccess::getProperty
and assignes$resolvedProperty = 'Max'
. SinceMax
is callable, this is executed.This is quite risky when working with user input. Possibly only support Closures here?
The text was updated successfully, but these errors were encountered: