


PHP implémente une connexion simulée au système des affaires académiques de Zhengfang
Cet article présente principalement la connexion au Zhengfang Academic Affairs System via la bibliothèque curl de PHP. Étant donné que Zhengfang Academic Affairs System peut avoir des mises à jour chaque année, cet article concerne 2018. Il présente certaines méthodes de simulation de connexion à Zhengfang I. j'espère que cela pourra aider tout le monde.
1. Enregistrez le code de vérification et les cookies de l'interface de connexion
Le contenu est le suivant
Nous pouvons le voir. Une requête, comme son nom l'indique, est le code de vérification de la page, qui est renvoyé par le serveur Zhengfang lors de l'accès à l'interface de connexion. Je fais référence aux blogs d'autres experts qui ont dit que le code de vérification peut être intercepté sans le saisir, mais je l'ai testé plusieurs fois et j'ai constaté qu'il ne fonctionnait pas. Par conséquent, je pense que Zhengfang aurait dû corriger ce bug, nous devrions donc. entrez honnêtement le code de vérification.
Il convient également de noter qu'il existe un paramètre Cookie dans l'image ci-dessus. Ce cookie sera renvoyé à chaque fois que vous visiterez la page, mais ce cookie ne prendra effet qu'une fois la connexion réussie, nous devons donc le sauvegarder. Ce cookie, car toutes les opérations que nous effectuons dans le système éducatif vérifieront ce cookie, ce qui équivaut à l'authentification de l'identité, ce cookie est donc essentiel.
Ci-dessous, j'utilise php pour enregistrer les cookies et les codes de vérification localement.
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);
Les étudiants qui connaissent PHP devraient être capables de comprendre la signification de ce code. Créez d'abord une session, nous enregistrons le cookie obtenu à chaque fois dans un dossier, et obtenons le cookie et le code de vérification renvoyé en accédant au nom de domaine. Pour remplir manuellement le code de vérification, nous créons un fichier code.txt. Après avoir vu l'image du code de vérification dans le dossier, nous l'écrivons manuellement dans le fichier code.txt. Après quinze secondes, nous enverrons une demande au. Serveur Zhengfang.
2. Recherchez le serveur qui a envoyé la requête et les paramètres requis
Vous pouvez voir une requête POST, dans laquelle l'un des en-têtes auxquels nous devons prêter attention l'image ci-dessus est Referer. Le but de cet en-tête de message est d'empêcher le CSRF. Quant au CSRF, j'y reviendrai à la fin. Jetons un coup d'œil aux paramètres POST :
Vous devriez être capable de deviner la plupart des paramètres. Je n'entrerai pas dans les détails sur les paramètres avec un contenu vide. Ce qu'il faut mentionner, c'est _VIEWSTATE. et RadioButtonList1.
Le premier paramètre est le statut de la page actuelle. Cette chaîne sert à vérifier que nous venons de l'interface de connexion. Ce paramètre est dans le code source de la page de connexion. Nous l'extrayons via des expressions régulières.
Le deuxième paramètre est le type de bouton, et le contenu est un encodage GBK. Mon type est étudiant.
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('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $con1, $view); //获取__VIEWSTATE字段并存到$view数组中 $post=array( '__VIEWSTATE'=>$view[1][0], 'txtUserName'=>$xh, 'TextBox2'=>$pw, 'txtSecretCode'=>$code, 'RadioButtonList1'=>'%D1%A7%C9%FA', //“学生”的gbk编码 'Button1'=>'', 'lbLanguage'=>'', 'hidPdrs'=>'', 'hidsc'=>'' ); $con2=login_post($url,$cookie,http_build_query($post)); //将数组连接成字符串
À ce stade, nous pouvons accéder à notre fichier php. Si votre contenu est le suivant, félicitations, vous vous êtes connecté avec succès à Zhengfang.
3. Implémenter la fonction d'accès à l'horaire des cours
Comme mentionné précédemment, même si nous nous connectons avec succès, nous ne pouvons pas effectuer les opérations fonctionnelles à l'intérieur car chaque section le nécessite. différents paramètres, ou différentes adresses de requête, je vais donc introduire ici une fonction d'accès aux scores.
Entrez dans la section de requête de score et examinons l'adresse et les paramètres de la demande.
Les paramètres sont les suivants :
Tout le monde devrait pouvoir comprendre ces paramètres. Le seul est gnmkdm. Le contenu de ce paramètre est une chaîne générée aléatoirement. Ce n'est pas un paramètre obligatoire. Les autres ont été essentiellement mentionnés précédemment, _VEIWSTATE est la même que la méthode obtenue précédemment. Le code est donné ci-dessous.
preg_match_all('/<span id="xhxm">([^<>]+)/', $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,''); preg_match_all('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $viewstate, $vs); $state=$vs[1][0]; //$state存放一会post的__VIEWSTATE //每个页面都有不同的参数请求,根据不同情况来发送不同的参数 $post=array( '__EVENTTARGET'=>'', '__EVENTARGUMENT'=>'', '__VIEWSTATE'=>$state, 'hidLanguage'=>'', 'ddlXN'=>'2016-2017', //当前学年 'ddlXQ'=>'1', //当前学期 'ddl_kcxz'=>'', 'Button1'=>'%B0%B4%D1%A7%C6%DA%B2%E9%D1%AF' //“学期成绩”的gbk编码,视情况而定 ); $content=login_post($url2,$cookie,http_build_query($post)); echo $content;
D'accord, le code est terminé. Si votre page s'affiche comme suit, alors vous avez réussi.
4. Résumé
En fait, c'est un peu plus gênant lors de la connexion. Après avoir saisi, les deux paramètres nécessaires Cookie et _VIEWSTATE vous sont laissés. à chaque requête POST, puis combinez-le selon le format de la requête. Le code ci-dessus ne signalera pas d'erreur lors de l'exécution. Veuillez le copier et l'exécuter pour voir. Mais après quelques années, nous verrons si Zhengfang comblera les lacunes. L'intervalle de temps entre la lecture d'autres blogs était auparavant trop long, j'écrirai donc un article sur 18 ans. Si vous ne comprenez toujours pas quelque chose, vous pouvez l'envoyer. envoyez-moi un message privé ou laissez un message dans la zone de commentaire. Discussions bienvenues.
5. À propos du CSRF
Le soi-disant CSRF est une contrefaçon intersite, ce qui signifie que quelqu'un d'autre vole votre identité pour envoyer une requête au serveur. L'en-tête Referer mentionné précédemment sert à se défendre contre cela. attaque, ce qui signifie que Saïd, si nous voulons nous connecter avec succès au système des affaires académiques de Zhengfang, nous devons passer par la page de l'interface de connexion, ce qui signifie que l'adresse avant le saut doit être http://jwgl.hbpu.edu.cn /. Lors des tests, chacun utilise le système d'administration académique de sa propre université, car cette adresse est le système d'administration académique de mon université et je peux me connecter avec succès via mon identifiant d'étudiant et mon mot de passe. Enfin, j'ai posté un blog sur les attaques CSRF, écrit par un gros bonnet. Décrivez CSRF en détail. (Cliquez sur le lien ci-dessous)
Attaque et défense CSRF
Connexion simulée PHP au système des affaires académiques de Zhengfang (2018)
Cet article présente principalement la connexion du système des affaires académiques de Zhengfang via curl bibliothèque de php. Depuis Zhengfang Academic Affairs Le système peut avoir des mises à jour chaque année, donc cet article concerne 2018 et présente quelques méthodes de simulation de connexion à Zhengfang.
1. Enregistrez le code de vérification et le cookie de l'interface de connexion
Le contenu est le suivant
Nous pouvons voir une telle demande, Comme son nom l'indique, il s'agit du code de vérification de la page, qui est renvoyé par le serveur Zhengfang lors de l'accès à l'interface de connexion. Je fais référence aux blogs d'autres experts qui ont dit que le code de vérification peut être intercepté sans le saisir, mais je l'ai testé plusieurs fois et j'ai constaté qu'il ne fonctionnait pas. Par conséquent, je pense que Zhengfang aurait dû corriger ce bug, nous devrions donc. entrez honnêtement le code de vérification.
Il convient également de noter qu'il existe un paramètre Cookie dans l'image ci-dessus. Ce cookie sera renvoyé à chaque fois que vous visiterez la page, mais ce cookie ne prendra effet qu'une fois la connexion réussie, nous en avons donc besoin. pour enregistrer ce cookie. Parce que toutes les opérations que nous effectuons dans le système éducatif vérifieront ce cookie, ce qui équivaut à une vérification d'identité, ce cookie est donc essentiel.
Ci-dessous, j'utilise php pour enregistrer les cookies et les codes de vérification localement.
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);
Les étudiants qui connaissent PHP devraient être capables de comprendre la signification de ce code. Créez d'abord une session, nous enregistrons le cookie obtenu à chaque fois dans un dossier, et obtenons le cookie et le code de vérification renvoyé en accédant au nom de domaine. Pour remplir manuellement le code de vérification, nous créons un fichier code.txt. Après avoir vu l'image du code de vérification dans le dossier, nous l'écrivons manuellement dans le fichier code.txt. Après quinze secondes, nous enverrons une demande au. Serveur Zhengfang.
2. Recherchez le serveur qui a envoyé la requête et les paramètres requis
Vous pouvez voir une requête POST, dans laquelle l'un des en-têtes auxquels nous devons prêter attention l'image ci-dessus est Referer. Le but de cet en-tête de message est d'empêcher le CSRF. Quant au CSRF, j'y reviendrai à la fin. Jetons un coup d'œil aux paramètres POST :
Vous devriez être capable de deviner la plupart des paramètres. Je n'entrerai pas dans les détails sur les paramètres avec un contenu vide. Ce qu'il faut mentionner, c'est _VIEWSTATE. et RadioButtonList1.
Le premier paramètre est le statut de la page actuelle. Cette chaîne sert à vérifier que nous venons de l'interface de connexion. Ce paramètre est dans le code source de la page de connexion. Nous l'extrayons via des expressions régulières.
Le deuxième paramètre est le type de bouton, et le contenu est un encodage GBK. Mon type est étudiant.
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('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $con1, $view); //获取__VIEWSTATE字段并存到$view数组中 $post=array( '__VIEWSTATE'=>$view[1][0], 'txtUserName'=>$xh, 'TextBox2'=>$pw, 'txtSecretCode'=>$code, 'RadioButtonList1'=>'%D1%A7%C9%FA', //“学生”的gbk编码 'Button1'=>'', 'lbLanguage'=>'', 'hidPdrs'=>'', 'hidsc'=>'' ); $con2=login_post($url,$cookie,http_build_query($post)); //将数组连接成字符串
À ce stade, nous pouvons accéder à notre fichier php. Si votre contenu est le suivant, félicitations, vous vous êtes connecté avec succès à Zhengfang.
3. Implémenter la fonction d'accès à l'horaire des cours
Comme mentionné précédemment, même si nous nous connectons avec succès, nous ne pouvons pas effectuer les opérations fonctionnelles à l'intérieur car chaque section le nécessite. différents paramètres, ou différentes adresses de requête, je vais donc introduire ici une fonction d'accès aux scores.
Entrez dans la section de requête de score et examinons l'adresse et les paramètres de la demande.
Les paramètres sont les suivants :
Tout le monde devrait pouvoir comprendre ces paramètres. Le seul est gnmkdm. Le contenu de ce paramètre est une chaîne générée aléatoirement. Ce n'est pas un paramètre obligatoire. Les autres ont été essentiellement mentionnés précédemment, _VEIWSTATE est la même que la méthode obtenue précédemment. Le code est donné ci-dessous.
preg_match_all('/<span id="xhxm">([^<>]+)/', $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,''); preg_match_all('/<input type="hidden" name="__VIEWSTATE" value="([^<>]+)" \/>/', $viewstate, $vs); $state=$vs[1][0]; //$state存放一会post的__VIEWSTATE //每个页面都有不同的参数请求,根据不同情况来发送不同的参数 $post=array( '__EVENTTARGET'=>'', '__EVENTARGUMENT'=>'', '__VIEWSTATE'=>$state, 'hidLanguage'=>'', 'ddlXN'=>'2016-2017', //当前学年 'ddlXQ'=>'1', //当前学期 'ddl_kcxz'=>'', 'Button1'=>'%B0%B4%D1%A7%C6%DA%B2%E9%D1%AF' //“学期成绩”的gbk编码,视情况而定 ); $content=login_post($url2,$cookie,http_build_query($post)); echo $content;
D'accord, le code est terminé. Si votre page s'affiche comme suit, alors vous avez réussi.
4. Résumé
En fait, c'est un peu plus gênant lors de la connexion. Après avoir entré, les deux paramètres nécessaires Cookie et _VIEWSTATE sont requis. Pour les autres paramètres, vérifiez simplement chaque requête POST par vous-même, puis selon Combinez simplement les formats de demande. Le code ci-dessus ne signalera pas d'erreur lors de l'exécution. Veuillez le copier et l'exécuter pour voir. Mais après quelques années, nous verrons si Zhengfang comblera les lacunes. L'intervalle de temps entre la lecture d'autres blogs était auparavant trop long, j'écrirai donc un article sur 18 ans. Si vous ne comprenez toujours pas quelque chose, vous pouvez l'envoyer. envoyez-moi un message privé ou laissez un message dans la zone de commentaire. Discussions bienvenues.
5. À propos du CSRF
Le soi-disant CSRF est une contrefaçon intersite, ce qui signifie que quelqu'un d'autre vole votre identité pour envoyer une requête au serveur. se défendre contre cette attaque. , ce qui signifie que si nous voulons nous connecter avec succès au système des affaires académiques de Zhengfang, nous devons passer par la page de l'interface de connexion, ce qui signifie que l'adresse avant le saut doit être http://jwgl.hbpu. edu.cn/ . Lors des tests, chacun utilise le système d'administration académique de sa propre université, car cette adresse est le système d'administration académique de mon université et je peux me connecter avec succès via mon identifiant d'étudiant et mon mot de passe. Enfin, j'ai posté un blog sur les attaques CSRF, écrit par un gros bonnet. Décrivez CSRF en détail. (Cliquez sur le lien ci-dessous)
Attaque et défense CSRF.
Recommandations associées :
10 articles recommandés sur le système d'administration éducative
Un petit programme qui simule la connexion au système d'administration éducative pour calculer GPA
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.
