|
@@ -181,13 +181,20 @@ XML;
|
|
return ProfileController::accountCheck($profile);
|
|
return ProfileController::accountCheck($profile);
|
|
}
|
|
}
|
|
$body = $request->getContent();
|
|
$body = $request->getContent();
|
|
- $bodyDecoded = json_decode($body, true);
|
|
|
|
|
|
+ $bodyDecoded = json_decode($body, true, 8);
|
|
$signature = $request->header('signature');
|
|
$signature = $request->header('signature');
|
|
if(!$signature) {
|
|
if(!$signature) {
|
|
abort(400, 'Missing signature header');
|
|
abort(400, 'Missing signature header');
|
|
}
|
|
}
|
|
$signatureData = HttpSignature::parseSignatureHeader($signature);
|
|
$signatureData = HttpSignature::parseSignatureHeader($signature);
|
|
- $actor = Profile::whereKeyId($signatureData['keyId'])->first();
|
|
|
|
|
|
+ $keyId = Helpers::validateUrl($signatureData['keyId']);
|
|
|
|
+ $id = Helpers::validateUrl($bodyDecoded['id']);
|
|
|
|
+ $keyDomain = parse_url($keyId, PHP_URL_HOST);
|
|
|
|
+ $idDomain = parse_url($id, PHP_URL_HOST);
|
|
|
|
+ if(!$keyDomain || !$idDomain || $keyDomain !== $idDomain) {
|
|
|
|
+ abort(400, 'Invalid request');
|
|
|
|
+ }
|
|
|
|
+ $actor = Profile::whereKeyId($keyId)->first();
|
|
if(!$actor) {
|
|
if(!$actor) {
|
|
$actor = Helpers::profileFirstOrNew($bodyDecoded['actor']);
|
|
$actor = Helpers::profileFirstOrNew($bodyDecoded['actor']);
|
|
}
|
|
}
|