이 기사의 예에서는 PHP가 Curl을 사용하여 Weibo를 게시하기 위해 Sina Weibo에 로그인하는 사용자를 모방하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 구현 방법은 다음과 같습니다.
이제 PHP를 사용하여 사용자 로그인을 모방할 때 PHP 컬 기능을 사용하겠습니다. 왜냐하면 이 함수만이 사용자처럼 다른 사람의 웹사이트에 액세스할 수 있기 때문입니다. 컬을 도입하여 Sina Weibo에 로그인하고 웨이보 애플리케이션을 게시해 보겠습니다.
어제 웨이보 로그인을 시뮬레이션한 후 웨이보에 게시해야 한다는 요청을 받았습니다. 지금까지 알리바바, 위챗 및 기타 내부 시스템에 대한 시뮬레이션 로그인을 많이 한 적이 없습니다. 로그인이 안되네요 ㅎㅎ 그래서 심각하게 받아들이진 않았지만 시나님의 로그인 과정을 분석해보니 부담이 되네요
sha1(sha1(sha1(pwd)).once.servertime)을 만났을 때, 주로 암호화 알고리즘을 알아내기 어렵게 만들어서 비밀번호는 물론이고 사용할 수 없었습니다. 로그인 후 한 시간 동안 인터넷에서 다양한 코드를 검색해 보았지만 아무것도 얻지 못했습니다.
내 Weibo 계정과 비밀번호를 사용하여 Sina 메일함이나 다른 Sina 제품에 로그인할 수 있나요? 물론, 내 Weibo 계정으로 다시 Weibo를 방문하면 이미 로그인되어 있습니다. . 이것이 유용하다는 것을 증명하시겠습니까?
사실 대기업이 프로젝트에 투자하는 기술은 프로젝트의 수익성과 전망에 많은 영향을 미치지만, 반드시 그렇지는 않습니다. 다른 경우에는 로컬 비밀번호가 암호화되지 않았다고 말하기가 쉽지 않습니까? (PS: 저는 네트워크 보안에 더 관심이 많습니다. 이 방법을 해커를 위한 사이드 노트라고 합니다. 사이드 노트는 해커가 웹사이트를 공격할 때 웹사이트의 보안이 매우 좋고, 알려진 취약점이 없으며, 규모가 크기 때문에 해커는 이 웹 사이트의 서버에서 다른 웹 사이트를 찾은 다음 이 웹 사이트를 사용하여 말을 탑재하고 권한을 높일 수 있습니다. 같은 서버에 있는 줄 알고 타겟 웹사이트가 해킹당할 테니까... 어떤 방법을 사용해도 타겟 스테이션을 얻는 것이 목표입니다. 혹시 나쁜 생각이 있으신가요?)
https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543 간단한 패킷 캡처를 통해 비밀번호가 암호화되지 않은 것으로 나타났습니다. . ? 사실 여기서는 아직 행복하기엔 좀 이르네요
먼저 Sina에 로그인하면 몇 분 안에 코드가 준비됩니다. 반환되는 것은 json 배열입니다
$password = $p;
$username = base64_encode($u);
$loginUrl = 'https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543';
$loginData['entry'] = 'sso';
$loginData['gateway'] = '1';
$loginData['from'] = '널';
$loginData['savestate'] = '30';
$loginData['useticket'] = '0';
$loginData['pagerefer'] = '';
$loginData['vsnf'] = '1';
$loginData['su'] = base64_encode($u);
$loginData['service'] = 'sso';
$loginData['sp'] = $password;
$loginData['sr'] = '1920*1080';
$loginData['encoding'] = 'UTF-8';
$loginData['cdult'] = '3';
$loginData['domain'] = 'sina.com.cn';
$loginData['prelt'] = '0';
$loginData['returntype'] = 'TEXT';
//var_dump($loginData);exit;
$login = json_decode(loginPost($loginUrl,$loginData),true);
var_dump($login);exit;function loginPost($url,$data){
전역 $cookie_file ;
//echo $cookie_file ;exit;
$tmp = '';
if(is_array($data)){
foreach($data를 $key =>$value로){
$tmp .= $key."=".$value."&";
}
$post = 트림($tmp,"&");
}그밖에{
$post = $data;
}
$ch = 컬_init();
컬_setopt($ch,CURLOPT_URL,$url)
컬_setopt($ch,CURLOPT_RETURNTRANSFER,1)
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
컬_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
컬_setopt($ch,CURLOPT_POST,1);
컬_setopt($ch,CURLOPT_POSTFIELDS,$post);
컬_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
컬_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$return = 컬_exec($ch);
$info = 컬_getinfo($ch);
컬_닫기($ch);
$return;
}
반환되는 것은 배열로 변환할 수 있는 json 데이터입니다
배열(크기=4)
'retcode' => 문자열 '0'(길이=1)
'uid' => 문자열 '1920109964'(길이=10)
'nick' => 문자열 '비 할아버지가 이야기를 들려줍니다'(길이=18)
'crossDomainUrlList' =>
배열(크기=2)
0 => 문자열 'https://passport.weibo.com/wbsso/login?ticket=ST-MTkyMDEwOTk2NA==-1403228192-gz-AB37DC0C18BA3BFCD90AEFAC6115149D&ssosavestate=1434764192'(길이=140)
1 => 문자열 'https://crosdom.weicaifu.com/sso/crosdom?action=login&savestate=1434764192'(길이=74)
이때는 로그인에 성공했다는 의미인데 실제로 저희 웨이보 홈페이지 주소는 weibo,com이 아니고 http://weibo.com/bipeng0405/home?wvr=5 어떻게 구하나요? 이 주소는 매우 간단합니다. Weibo를 직접 가져오세요. com을 선택하면 자동으로 다시 리디렉션됩니다. 리디렉션된 주소만 기록하면 됩니다.
$ch = cur_init();
cur_setopt($ch,CURLOPT_URL,"http://weibo.com")
컬_setopt($ch,CURLOPT_RETURNTRANSFER,1)
컬_setopt($ch,CURLOPT_COOKIEFILE, $cookie_file)
컬_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file)
$return = 컬_exec($ch);
$info = 컬_getinfo($ch);
컬_닫기($ch);
여기서 또 다른 문제가 있는데, 이때 웨이보 홈페이지로 점프가 되지 않는 현상이 나타나는데, 로그인을 하면 접속 주소가 2개 있는 것을 볼 수 있는데, 그 중 하나가 아래의 주소입니다. 쿠키가 설정되어 있으므로 먼저 가져오세요.
get($login['crossDomainUrlList'][0] );
이 코드는 weibo.com 이전에 받아야 합니다. 그렇지 않으면 문제가 발생합니다.
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.