记录
之前觉得问题都是出在RP
端的,比如没有正确校验state
参数,没有正确使用state
参数这些。刚刚突然发现其实IdP
端也没有校验好。
有些网站压根就没有使用state
参数,这种情况下,作为IdP
端,应该是提示需要有随机参数的,但是像微信、微博都是当做正常情况下处理的。(可能是为了给应用网站提供更大的自主空间,允许他们使用自己定义的参数,毕竟讲道理只要应用网站做好校验,就可以避免漏洞的)
还发现CSDN
在使用OAuth
来绑定微信账号的时候,state
参数是固定为了csdn
,但是因为CSDN
在绑定账号前需要进行身份认证,所以,其实也是不存在可利用的漏洞的,无法发起CSRF
。
另外,还有一个问题,如果应用网站的处理是:校验了state
参数。讲道理应该是没有问题的。但是我用的这个OAuth client
端的模版(thephpleague),给的示例代码里其实是存在问题的。
示例代码如下(https://oauth2-client.thephpleague.com/usage/
):
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => 'XXXXXX', // The client ID assigned to you by the provider
'clientSecret' => 'XXXXXX', // The client password assigned to you by the provider
'redirectUri' => 'https://my.example.com/your-redirect-url/',
'urlAuthorize' => 'https://service.example.com/authorize',
'urlAccessToken' => 'https://se