Skip to content

Commit f0ab618

Browse files
committed
SAML-Toolkits#201. Fix issues with SP entity_id, acs url and sls url that contains &
1 parent d7f3d9f commit f0ab618

File tree

4 files changed

+15
-8
lines changed

4 files changed

+15
-8
lines changed

lib/Saml2/AuthnRequest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ public function __construct(OneLogin_Saml2_Settings $settings, $forceAuthn = fal
114114
}
115115
}
116116

117+
$sp_entity_id = htmlspecialchars($spData['entityId'], ENT_QUOTES);
118+
$acs_url = htmlspecialchars($spData['assertionConsumerService']['url'], ENT_QUOTES);
117119
$request = <<<AUTHNREQUEST
118120
<samlp:AuthnRequest
119121
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
@@ -124,8 +126,8 @@ public function __construct(OneLogin_Saml2_Settings $settings, $forceAuthn = fal
124126
IssueInstant="$issueInstant"
125127
Destination="{$idpData['singleSignOnService']['url']}"
126128
ProtocolBinding="{$spData['assertionConsumerService']['binding']}"
127-
AssertionConsumerServiceURL="{$spData['assertionConsumerService']['url']}">
128-
<saml:Issuer>{$spData['entityId']}</saml:Issuer>
129+
AssertionConsumerServiceURL="{$acs_url}">
130+
<saml:Issuer>{$sp_entity_id}</saml:Issuer>
129131
{$nameIdPolicyStr}
130132
{$requestedAuthnStr}
131133
</samlp:AuthnRequest>

lib/Saml2/LogoutRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public function __construct(OneLogin_Saml2_Settings $settings, $request = null,
9090

9191
$sessionIndexStr = isset($sessionIndex) ? "<samlp:SessionIndex>{$sessionIndex}</samlp:SessionIndex>" : "";
9292

93+
$sp_entity_id = htmlspecialchars($spData['entityId'], ENT_QUOTES);
9394
$logoutRequest = <<<LOGOUTREQUEST
9495
<samlp:LogoutRequest
9596
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
@@ -98,7 +99,7 @@ public function __construct(OneLogin_Saml2_Settings $settings, $request = null,
9899
Version="2.0"
99100
IssueInstant="{$issueInstant}"
100101
Destination="{$idpData['singleLogoutService']['url']}">
101-
<saml:Issuer>{$spData['entityId']}</saml:Issuer>
102+
<saml:Issuer>{$sp_entity_id}</saml:Issuer>
102103
{$nameIdObj}
103104
{$sessionIndexStr}
104105
</samlp:LogoutRequest>

lib/Saml2/LogoutResponse.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ public function build($inResponseTo)
221221
$this->id = OneLogin_Saml2_Utils::generateUniqueID();
222222
$issueInstant = OneLogin_Saml2_Utils::parseTime2SAML(time());
223223

224+
$sp_entity_id = htmlspecialchars($spData['entityId'], ENT_QUOTES);
224225
$logoutResponse = <<<LOGOUTRESPONSE
225226
<samlp:LogoutResponse xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
226227
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
@@ -230,7 +231,7 @@ public function build($inResponseTo)
230231
Destination="{$idpData['singleLogoutService']['url']}"
231232
InResponseTo="{$inResponseTo}"
232233
>
233-
<saml:Issuer>{$spData['entityId']}</saml:Issuer>
234+
<saml:Issuer>{$sp_entity_id}</saml:Issuer>
234235
<samlp:Status>
235236
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
236237
</samlp:Status>

lib/Saml2/Metadata.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ public static function builder($sp, $authnsign = false, $wsign = false, $validUn
3838
$sls = '';
3939

4040
if (isset($sp['singleLogoutService'])) {
41+
$sls_url = htmlspecialchars($sp['singleLogoutService']['url'], ENT_QUOTES);
4142
$sls = <<<SLS_TEMPLATE
4243
<md:SingleLogoutService Binding="{$sp['singleLogoutService']['binding']}"
43-
Location="{$sp['singleLogoutService']['url']}" />
44+
Location="{$sls_url}" />
4445
4546
SLS_TEMPLATE;
4647
}
@@ -127,7 +128,7 @@ public static function builder($sp, $authnsign = false, $wsign = false, $validUn
127128
$reqAttrAuxStr = '>';
128129
if (is_string($attribute['attributeValue'])) {
129130
$attribute['attributeValue'] = array($attribute['attributeValue']);
130-
}
131+
}
131132
foreach ($attribute['attributeValue'] as $attrValue) {
132133
$reqAttrAuxStr .=<<<ATTRIBUTEVALUE
133134
@@ -149,16 +150,18 @@ public static function builder($sp, $authnsign = false, $wsign = false, $validUn
149150
METADATA_TEMPLATE;
150151
}
151152

153+
$sp_entity_id = htmlspecialchars($sp['entityId'], ENT_QUOTES);
154+
$acs_url = htmlspecialchars($sp['assertionConsumerService']['url'], ENT_QUOTES);
152155
$metadata = <<<METADATA_TEMPLATE
153156
<?xml version="1.0"?>
154157
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
155158
validUntil="{$validUntilTime}"
156159
cacheDuration="PT{$cacheDuration}S"
157-
entityID="{$sp['entityId']}">
160+
entityID="{$sp_entity_id}">
158161
<md:SPSSODescriptor AuthnRequestsSigned="{$strAuthnsign}" WantAssertionsSigned="{$strWsign}" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
159162
{$sls} <md:NameIDFormat>{$sp['NameIDFormat']}</md:NameIDFormat>
160163
<md:AssertionConsumerService Binding="{$sp['assertionConsumerService']['binding']}"
161-
Location="{$sp['assertionConsumerService']['url']}"
164+
Location="{$acs_url}"
162165
index="1" />
163166
{$strAttributeConsumingService}
164167
</md:SPSSODescriptor>{$strOrganization}{$strContacts}

0 commit comments

Comments
 (0)