>  기사  >  백엔드 개발  >  PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

小云云
小云云원래의
2018-03-30 13:51:055003검색

이 글은 주로 PHP의 컬 라이브러리를 통한 Zhengfang 학술 시스템의 로그인을 소개합니다. Zhengfang 학술 시스템은 매년 일부 업데이트가 있을 수 있으므로 이 글은 2018년 기준입니다. Zhengfang에 대한 로그인을 시뮬레이션하는 몇 가지 방법을 소개합니다. 모두를 도울 수 있습니다.


1. 로그인 인터페이스의 인증코드와 쿠키를 저장하세요

PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

내용은 다음과 같습니다
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
이름에서 알 수 있듯이 해당 인증코드입니다. 페이지는 로그인 인터페이스에 액세스할 때 Zhengfang 서버에서 반환하는 페이지입니다. 인증코드를 입력하지 않고도 가로챌 수 있다는 다른 전문가들의 블로그를 참고했는데, 여러 번 테스트해본 결과 작동하지 않는 것으로 나타났습니다. 따라서 Zhengfang에서 이 버그를 수정했어야 했다고 생각합니다. 인증번호를 솔직하게 입력하세요.

위 그림에는 매개변수 쿠키가 있다는 점에 유의하세요. 이 쿠키는 페이지를 방문할 때마다 반환되지만 이 쿠키는 로그인에 성공한 후에만 적용되므로 이를 저장해야 합니다. 교육 행정 시스템에서 수행되는 모든 작업은 신원 확인과 동일한 쿠키를 확인하므로 이 쿠키는 필수적입니다.

아래에서는 PHP를 사용하여 쿠키와 인증 코드를 로컬에 저장합니다.

    session_start();    $id=session_id();    $_SESSION['id']=$id;    $cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt'; //cookie路径,将cookie写入一个文件中

    $verify_code_url = "http://jwgl.hbpu.edu.cn/CheckCode.aspx"; //验证码地址
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $verify_code_url);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);  //保存cookie
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    $img = curl_exec($curl);  //执行curl
    curl_close($curl);    $fp = fopen("verifyCode.jpg","w");  //文件名
    fwrite($fp,$img);  //写入文件
    fclose($fp);
    echo "验证码取出完成,正在休眠,15秒内请把验证码填入code.txt并保存\n";    //停止运行15秒
    sleep(15);

PHP에 익숙한 학생들은 이 코드의 의미를 이해할 수 있어야 합니다. 먼저 세션을 생성하고, 매번 얻은 쿠키를 폴더에 저장하고, 도메인 이름에 접속하여 쿠키와 반환된 인증 코드를 얻습니다. 인증 코드를 수동으로 입력하기 위해 code.txt 파일을 생성합니다. 폴더에서 인증 코드 그림을 확인한 후 15초 후에 해당 코드를 code.txt 파일에 작성합니다. 정팡 서버.

2. 요청을 보낸 서버와 필수 매개변수를 찾으세요.

PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
위 그림에서 주목해야 할 헤더 중 하나가 이 헤더의 목적입니다. CSRF 방지에 대해서는 마지막에 설명하겠습니다. POST 매개변수를 살펴보겠습니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
대부분의 매개변수를 추측할 수 있어야 합니다. 빈 내용이 있는 매개변수에 대해서는 자세히 설명하지 않겠습니다. _VIEWSTATE 및 RadioButtonList1입니다.
첫 번째 매개변수는 현재 페이지의 상태입니다. 이 문자열은 로그인 인터페이스에서 오는지 확인하기 위한 것입니다. 이 매개변수는 로그인 페이지의 소스 코드에 있습니다.
두 번째 매개변수는 버튼 유형이며, 내용은 GBK 코드입니다.

function login_post($url,$cookie,$post){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  //不自动输出数据,要echo才行
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  //重要,抓取跳转后数据
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($ch, CURLOPT_REFERER, 'http://jwgl.hbpu.edu.cn/');  //重要,302跳转需要referer,可以在Request Headers找到
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);  //post提交数据
        $result=curl_exec($ch);
        curl_close($ch);        return $result;
    }    $xh='';//此处手动输入学号,上线后通过$_POST得到
    $pw='';//此处手动输入密码,上线后通过$_POST得到
    $code = file_get_contents("code.txt");//把验证码输入到code.txt中后通过此方法取出验证码
    $cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.txt';//取出cookie
    $url="http://jwgl.hbpu.edu.cn/default2.aspx";  //教务处地址
    $con1=login_post($url,$cookie,'');
    preg_match_all(&#39;/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/&#39;, $con1, $view); //获取__VIEWSTATE字段并存到$view数组中
    $post=array(        &#39;__VIEWSTATE&#39;=>$view[1][0],        &#39;txtUserName&#39;=>$xh,        &#39;TextBox2&#39;=>$pw,        &#39;txtSecretCode&#39;=>$code,        &#39;RadioButtonList1&#39;=>&#39;%D1%A7%C9%FA&#39;,  //“学生”的gbk编码
        &#39;Button1&#39;=>&#39;&#39;,        &#39;lbLanguage&#39;=>&#39;&#39;,        &#39;hidPdrs&#39;=>&#39;&#39;,        &#39;hidsc&#39;=>&#39;&#39;
    );    $con2=login_post($url,$cookie,http_build_query($post)); //将数组连接成字符串

이제 PHP 파일에 액세스할 수 있습니다. 콘텐츠가 다음과 같으면 축하합니다. Zhengfang에 성공적으로 로그인한 것입니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

3. 수업일정 접근 기능 구현

앞서 말씀드린 것처럼 로그인에 성공하더라도 각 섹션마다 필요한 매개변수나 요청 주소가 다르기 때문에 내부적으로 기능적인 작업을 수행할 수 없기 때문에 이렇게 하겠습니다. 점수에 접근하는 기능을 소개합니다.



점수 쿼리 섹션에 들어가 요청 주소와 매개변수를 살펴보겠습니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
매개변수는 다음과 같습니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
모든 사람이 이 매개변수를 이해할 수 있어야 합니다. 유일한 것은 gnmkdm입니다. 이 매개변수의 내용은 무작위로 생성된 문자열이며 필수 매개변수는 아닙니다. 다른 것들은 기본적으로 이전에 언급한 바 있으며, _VEIWSTATE는 이전에 얻은 방법과 동일합니다. 코드는 아래와 같습니다.

preg_match_all(&#39;/<span id="xhxm">([^<>]+)/&#39;, $con2, $xm);   //正则出的数据存到$xm数组中
    $xm[1][0]=substr($xm[1][0],0,-4);  //字符串截取,获得姓名

    //拼接所需要访问的url,我们需要获取哪个url就去拼接完整的url,此处是获取成绩的url
    //以后如果需要获取别的数据,就去官网找他的url,看需要哪些参数
    $url2="http://jwgl.hbpu.edu.cn/xscj_gc.aspx?xh=".$xh."&xm=".$xm[1][0];    $viewstate=login_post($url2,$cookie,&#39;&#39;);
    preg_match_all(&#39;/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/&#39;, $viewstate, $vs);    $state=$vs[1][0];  //$state存放一会post的__VIEWSTATE

    //每个页面都有不同的参数请求,根据不同情况来发送不同的参数
    $post=array(           &#39;__EVENTTARGET&#39;=>&#39;&#39;,           &#39;__EVENTARGUMENT&#39;=>&#39;&#39;,           &#39;__VIEWSTATE&#39;=>$state,           &#39;hidLanguage&#39;=>&#39;&#39;,           &#39;ddlXN&#39;=>&#39;2016-2017&#39;,  //当前学年
           &#39;ddlXQ&#39;=>&#39;1&#39;,  //当前学期
           &#39;ddl_kcxz&#39;=>&#39;&#39;,           &#39;Button1&#39;=>&#39;%B0%B4%D1%A7%C6%DA%B2%E9%D1%AF&#39;  //“学期成绩”的gbk编码,视情况而定
        );    $content=login_post($url2,$cookie,http_build_query($post));    echo $content;

자, 페이지가 다음과 같이 표시되면 코드가 완료된 것입니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

4. 요약

사실 로그인할 때 좀 더 번거롭습니다. 입력 후 필수 매개변수인 Cookie와 _VIEWSTATE가 필요하며, 그 외의 매개변수는 각각의 POST 요청을 직접 확인하신 후 조합하시면 됩니다. 요청 형식에 따라 처리됩니다. 위 코드는 실행 시 오류를 보고하지 않습니다. 복사하여 실행해 보세요. 하지만 몇 년 후에는 Zhengfang이 허점을 고칠 수 있을지 알아볼 것입니다. 이전에는 다른 블로그를 읽는 시간 간격이 너무 길었기 때문에 18년 동안 쓴 글을 아직도 이해하지 못하는 부분이 있으면 보내주시면 됩니다. 나에게 비공개 메시지를 보내거나 댓글 영역에 메시지를 남겨주세요.

5. CSRF에 대하여

소위 CSRF는 크로스 사이트 위조입니다. 즉, 다른 사람이 귀하의 신원을 도용하여 서버에 요청을 보내는 것을 의미합니다. 앞서 언급한 Referer 헤더는 이 공격을 방어하기 위한 것입니다. 우리는 성공하고 싶습니다. Zhengfang 학술 시스템에 로그인하려면 로그인 인터페이스의 페이지를 점프해야 합니다. 이는 점프하기 전의 주소가 http://jwgl.hbpu.edu.cn/이어야 함을 의미합니다. 테스트할 때 다들 자기 대학의 학사관리 시스템을 사용하는데, 이 주소가 우리 대학의 학사관리 시스템이고, 내 학생ID와 비밀번호를 통해 성공적으로 로그인할 수 있기 때문이다. 마지막으로 거물이 작성한 CSRF 공격에 대한 블로그를 게시했습니다. CSRF에 대해 자세히 설명하세요. (아래 링크 클릭)
CSRF 공격 및 방어

Zhengfang 학술 시스템에 대한 PHP 시뮬레이션 로그인(2018)

이 기사에서는 주로 Zhengfang 학술 시스템 이후 PHP의 컬 라이브러리를 통한 Zhengfang 학술 시스템의 로그인을 소개합니다. 사무 시스템은 매년 일부 업데이트가 있을 수 있습니다. 이 기사에서는 2018년에 Zhengfang 착륙을 시뮬레이션하는 몇 가지 방법을 소개합니다.


1. 로그인 인터페이스의 인증 코드와 쿠키를 저장하세요

PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
내용은 다음과 같습니다
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
이름에서 알 수 있듯이 페이지의 인증 코드입니다. , 이는 서버에서 반환된 로그인 인터페이스에 액세스할 때 올바른 방향입니다. 인증코드를 입력하지 않고도 가로챌 수 있다는 다른 전문가들의 블로그를 참고했는데, 여러 번 테스트해본 결과 작동하지 않는 것으로 나타났습니다. 따라서 Zhengfang에서 이 버그를 수정했어야 했다고 생각합니다. 인증번호를 솔직하게 입력하세요.

위 그림에는 매개변수 쿠키가 있다는 점도 참고하세요. 이 쿠키는 페이지를 방문할 때마다 반환되지만 이 쿠키는 로그인에 성공한 후에만 적용되므로 이 쿠키를 저장해야 합니다. 시스템 내에서 수행되는 모든 작업은 이 쿠키를 확인하는 역할을 하며, 이는 신원 확인과 동일하므로 이 쿠키는 필수적입니다.



아래에서는 PHP를 사용하여 쿠키와 인증 코드를 로컬에 저장합니다.

    session_start();    $id=session_id();    $_SESSION[&#39;id&#39;]=$id;    $cookie = dirname(__FILE__) . &#39;/cookie/&#39;.$_SESSION[&#39;id&#39;].&#39;.txt&#39;; //cookie路径,将cookie写入一个文件中

    $verify_code_url = "http://jwgl.hbpu.edu.cn/CheckCode.aspx"; //验证码地址
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $verify_code_url);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);  //保存cookie
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    $img = curl_exec($curl);  //执行curl
    curl_close($curl);    $fp = fopen("verifyCode.jpg","w");  //文件名
    fwrite($fp,$img);  //写入文件
    fclose($fp);
    echo "验证码取出完成,正在休眠,15秒内请把验证码填入code.txt并保存\n";    //停止运行15秒
    sleep(15);

PHP에 익숙한 학생들은 이 코드의 의미를 이해할 수 있어야 합니다. 먼저 세션을 생성하고, 매번 얻은 쿠키를 폴더에 저장하고, 도메인 이름에 접속하여 쿠키와 반환된 인증 코드를 얻습니다. 인증 코드를 수동으로 입력하기 위해 code.txt 파일을 생성합니다. 폴더에서 인증 코드 그림을 확인한 후 15초 후에 해당 코드를 code.txt 파일에 작성합니다. 정팡 서버.

2. 요청을 보낸 서버와 필수 매개변수를 찾으세요.

PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
위 그림에서 주목해야 할 헤더 중 하나가 이 헤더의 목적입니다. CSRF 방지에 대해서는 마지막에 설명하겠습니다. POST 매개변수를 살펴보겠습니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
대부분의 매개변수를 추측할 수 있어야 합니다. 빈 내용이 있는 매개변수에 대해서는 자세히 설명하지 않겠습니다. _VIEWSTATE 및 RadioButtonList1입니다.
첫 번째 매개변수는 현재 페이지의 상태입니다. 이 문자열은 로그인 인터페이스에서 오는지 확인하기 위한 것입니다. 이 매개변수는 로그인 페이지의 소스 코드에 있습니다.
두 번째 매개변수는 버튼 유형이며, 내용은 GBK 코드입니다.

function login_post($url,$cookie,$post){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  //不自动输出数据,要echo才行
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  //重要,抓取跳转后数据
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($ch, CURLOPT_REFERER, &#39;http://jwgl.hbpu.edu.cn/&#39;);  //重要,302跳转需要referer,可以在Request Headers找到
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);  //post提交数据
        $result=curl_exec($ch);
        curl_close($ch);        return $result;
    }    $xh=&#39;&#39;;//此处手动输入学号,上线后通过$_POST得到
    $pw=&#39;&#39;;//此处手动输入密码,上线后通过$_POST得到
    $code = file_get_contents("code.txt");//把验证码输入到code.txt中后通过此方法取出验证码
    $cookie = dirname(__FILE__) . &#39;/cookie/&#39;.$_SESSION[&#39;id&#39;].&#39;.txt&#39;;//取出cookie
    $url="http://jwgl.hbpu.edu.cn/default2.aspx";  //教务处地址
    $con1=login_post($url,$cookie,&#39;&#39;);
    preg_match_all(&#39;/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/&#39;, $con1, $view); //获取__VIEWSTATE字段并存到$view数组中
    $post=array(        &#39;__VIEWSTATE&#39;=>$view[1][0],        &#39;txtUserName&#39;=>$xh,        &#39;TextBox2&#39;=>$pw,        &#39;txtSecretCode&#39;=>$code,        &#39;RadioButtonList1&#39;=>&#39;%D1%A7%C9%FA&#39;,  //“学生”的gbk编码
        &#39;Button1&#39;=>&#39;&#39;,        &#39;lbLanguage&#39;=>&#39;&#39;,        &#39;hidPdrs&#39;=>&#39;&#39;,        &#39;hidsc&#39;=>&#39;&#39;
    );    $con2=login_post($url,$cookie,http_build_query($post)); //将数组连接成字符串

이제 PHP 파일에 액세스할 수 있습니다. 콘텐츠가 다음과 같으면 축하합니다. Zhengfang에 성공적으로 로그인한 것입니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

3. 수업일정 접근 기능을 구현해 보세요

앞서 말씀드린 것처럼 로그인에 성공하더라도 각 섹션마다 필요한 매개변수나 요청 주소가 다르기 때문에 내부에서 기능적인 작업을 수행할 수 없기 때문에 이렇게 하겠습니다. 점수에 접근하는 기능을 소개합니다.



점수 쿼리 섹션에 들어가 요청 주소와 매개변수를 살펴보겠습니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
매개변수는 다음과 같습니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.
모든 사람이 이 매개변수를 이해할 수 있어야 합니다. 유일한 것은 gnmkdm입니다. 이 매개변수의 내용은 무작위로 생성된 문자열이며 필수 매개변수는 아닙니다. 다른 것들은 기본적으로 이전에 언급한 바 있으며, _VEIWSTATE는 이전에 얻은 방법과 동일합니다. 코드는 아래와 같습니다.

preg_match_all(&#39;/<span id="xhxm">([^<>]+)/&#39;, $con2, $xm);   //正则出的数据存到$xm数组中
    $xm[1][0]=substr($xm[1][0],0,-4);  //字符串截取,获得姓名

    //拼接所需要访问的url,我们需要获取哪个url就去拼接完整的url,此处是获取成绩的url
    //以后如果需要获取别的数据,就去官网找他的url,看需要哪些参数
    $url2="http://jwgl.hbpu.edu.cn/xscj_gc.aspx?xh=".$xh."&xm=".$xm[1][0];    $viewstate=login_post($url2,$cookie,&#39;&#39;);
    preg_match_all(&#39;/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/&#39;, $viewstate, $vs);    $state=$vs[1][0];  //$state存放一会post的__VIEWSTATE

    //每个页面都有不同的参数请求,根据不同情况来发送不同的参数
    $post=array(           &#39;__EVENTTARGET&#39;=>&#39;&#39;,           &#39;__EVENTARGUMENT&#39;=>&#39;&#39;,           &#39;__VIEWSTATE&#39;=>$state,           &#39;hidLanguage&#39;=>&#39;&#39;,           &#39;ddlXN&#39;=>&#39;2016-2017&#39;,  //当前学年
           &#39;ddlXQ&#39;=>&#39;1&#39;,  //当前学期
           &#39;ddl_kcxz&#39;=>&#39;&#39;,           &#39;Button1&#39;=>&#39;%B0%B4%D1%A7%C6%DA%B2%E9%D1%AF&#39;  //“学期成绩”的gbk编码,视情况而定
        );    $content=login_post($url2,$cookie,http_build_query($post));    echo $content;

자, 페이지가 다음과 같이 표시되면 코드가 완료된 것입니다.
PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.

4. 요약

사실 로그인할 때 좀 더 번거롭습니다. 입력 후 필수 매개변수인 Cookie와 _VIEWSTATE가 필요합니다. 그 외의 매개변수는 각각의 POST 요청을 직접 확인한 후, 에 따라 결합하면 됩니다. 요청 형식을 사용하면 위 코드는 실행 시 오류를 보고하지 않습니다. 복사하여 실행해 보세요. 하지만 몇 년 후에는 Zhengfang이 허점을 고칠 수 있을지 알아볼 것입니다. 이전에는 다른 블로그를 읽는 시간 간격이 너무 길었기 때문에 18년 동안 쓴 글을 아직도 이해하지 못하는 부분이 있으면 보내주시면 됩니다. 나에게 비공개 메시지를 보내거나 토론 영역에 메시지를 남겨주세요.

5. CSRF에 대하여

소위 CSRF는 크로스 사이트 위조입니다. 즉, 다른 사람이 귀하의 신원을 도용하여 서버에 요청을 보내는 것을 의미합니다. 앞서 언급한 Referer 헤더는 이 공격을 방어하기 위한 것입니다. Zhengfang Academic Affairs System에 성공적으로 로그인하려면 로그인 인터페이스의 페이지로 이동해야 합니다. 즉, 점프하기 전 주소는 http://jwgl.hbpu.edu.cn/이어야 합니다. 테스트할 때 다들 자기 대학의 학사관리 시스템을 사용하는데, 이 주소가 우리 대학의 학사관리 시스템이고, 내 학생ID와 비밀번호를 통해 성공적으로 로그인할 수 있기 때문이다. 마지막으로 거물이 작성한 CSRF 공격에 대한 블로그를 게시했습니다. CSRF에 대해 자세히 설명하세요. (아래 링크 클릭)
CSRF 공격과 방어.

관련 추천:

교육 행정 시스템에 관한 추천 10개 기사

학점 계산을 위해 교육 행정 시스템 로그인을 시뮬레이션하는 작은 프로그램

PHP를 사용하여 Zhengfang 교육 행정 시스템에 시뮬레이션 로그인 구현

위 내용은 PHP는 Zhengfang Academic Affairs System에 대한 시뮬레이션된 로그인을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.