PHPでcurlを使用してログインセグメントフォールトをシミュレートするにはどうすればよいですか?
リーリー
返信内容:
リーリー
はじめに
この記事は、segmentfault に対する私の回答から来ており、興奮した部分をこのブログに記録しました。
一般的な意味は、segmentfault.com へのログインをシミュレートすることですが、しばらくの間手がかゆくなります。この記事は、この操作を誰もが理解できるようにガイドします。
分析
これは非常に良い質問ですが、皆さんの回答がすべて議論のない単なる机上の空論であるのは残念です。実際にはパケットキャプチャツールを放棄すると言っていますが、これはばかげています。アカウントのパスワードが直接表示されます。 Chrome で F12 を押します。クリア テキストで送信されたパケットをキャプチャする必要があるのはなぜですか?他の件名の http ヘッダーは chrome からコピーされます。
私の判断によれば、問題の原因は大量の http ヘッダーを送信していることであり、その Content-Length
は明らかに問題です。今回キャプチャしたパケットは 49 でしたが、アカウントを変更するのは非常に困難です。次回からは必ずパスワードです。たとえば、アカウントのパスワードが長すぎる場合、切り詰められる可能性があり、いずれにしても間違ったパスワードが要求されます (パスワードの一部のみが送信されるため)。
計画
実際、この興味深い質問を調査するために、私は興味深い実験を実施しました。
ここでは最も単純なスクリプト言語node.js
中的ajax
モデルを使用して操作プロセスを再構築します。
分析
まず、ログイン ページ (ソース コード ページ) に移動して、大まかに見てみましょう。 リーリー
このクロスドメインリクエストは、名前から判断すると、ログインに関連しているはずです。結果は混乱しています。命名規則によれば、圧縮前の名前は
であると推測されますが、うーん、まだ残っていますが、発行元は Virgo ではないようです。 login.js
,我们看下他删除了没有,我们尝试访问https://dfnjy7g2qaazm.cloudfront.net/v-575e20ec/user/script/login.js
それでは、ここを見てみましょう:
リーリー
/api/user/login
,即https://segmentfault.com/api/user/login
リクエストヘッダー
Chrome に似た最新のブラウザを使用しています。通常は https://segmentfault.com/user/login
にアクセスし、F12 キーを押して、network
パネルを選択してリクエストの監視を開始します。 、その後、アカウントとパスワードを任意に入力し、クリックしてログインします。
この時点で以下のメッセージが表示されるので、次のようにリクエストヘッダー
を抽出します
リーリー
https://segmentfault.com/user/login
,按下F12,选择network
面板开始监控请求,然后我们随意填写账号密码,点击登陆。
这个时候下面会有一条信息,我们提取其中的Request Header
これらのリクエストを同じ方法でサーバーに送信するだけで済みます。理論的には問題はなく、404 は発生しません。
1つずつテストできます。
デバッグ
ここでは、サーバーによって検証されたパラメーターをテストするためのコードを単純に記述するために、nodejs を使用します。
退屈なテストは、リクエストを削除し続けて、サーバーが 404 を返すかどうかを確認することです。 プロセスの詳細は説明しませんが、結果は次のとおりです。
- クエリ文字列の
- に対応します。
_
必须和Cookie
中的PHPSESSID
X-Requested-With
的值需要带ajax请求标志,即XMLHttpRequest
-
Referer
の値 サーバーがかなり厳しいようです。
ソースコード
リーリー同時に、オープンソースはGitHubのアドレスsegmentfault_loginerにあります
最初の部分は暗号化されていません、可能性の90%はCookieによって引き起こされます
1. https://segmentfault.com/ にアクセスして Cookie を取得します
2. 次に、投稿を送信しますこの GET パラメーターも非常に重要です
_
Charles を使用して HTTPS パケットをキャプチャできます。http://www.tuicool.com/articles/JfEZr23 を参照してください。パスワードがフロントエンドで JS で暗号化されている場合は、暗号化コードを確認できます。暗号化アルゴリズムも確認でき、このアルゴリズムの暗号化をシミュレートすることもできます。私も以前、チャイナモバイルのウェブサイトをクロールしたときにこの問題に遭遇しました
看原始http请求
<code>$ch = curl_init(); $url = "https://segmentfault.com/api/user/login?_=259f90fcf626f304c69c52db1454f03e"; $data = array( 'mail' => '***', 'password' => '**', ); foreach ($data as $key => $value){ $postfields .= urlencode($key) . '=' . urlencode($value) . '&'; } $postfields = rtrim($postfields, '&'); $headers = array( 'Accept:*/*', 'Accept-Encoding:gzip, deflate', 'Accept-Language:zh-CN,zh;q=0.8', 'Connection:keep-alive', 'Content-Type:application/x-www-form-urlencoded; charset=UTF-8', 'Cookie:mp_18fe57584af9659dea732cf41c1c0416_mixpanel=%7B%22distinct_id%22%3A%20%22153c6c3ec0c91-04fd9c038-12771e2d-1fa400-153c6c3ec0d18a%22%2C%22%24initial_referrer%22%3A%20%22%24direct%22%2C%22%24initial_referring_domain%22%3A%20%22%24direct%22%7D; editor-code-detect-disabled=1; PHPSESSID=web2~oag2uol7e47i88hp6t6uqac9b0; Hm_lvt_e23800c454aa573c0ccb16b52665ac26=1465290769,1465713371,1465781816,1465866651; Hm_lpvt_e23800c454aa573c0ccb16b52665ac26=1465867161; _ga=GA1.2.1469164019.1455850659; _gat=1', 'Host:segmentfault.com', 'Origin:https://segmentfault.com', 'Referer:https://segmentfault.com/', 'User-Agent:Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36', 'X-Requested-With:XMLHttpRequest', ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_ENCODING, ""); $result = curl_exec($ch); curl_close($ch); var_dump($result);</code>
至少得先保存个cookie在登录吧
之前写过一个
51job
的模拟登录并投递简历的demo,代码如下,可参考
<?php // 首先引入zend框架(官网地址:http://www.zend.com/) require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Http_Client'); $client = new Zend_Http_Client(); $client->setCookieJar(); /** * 登录 */ //$client->setHeaders('Set-cookie', $response->getHeader('Set-cookie')); $client->setUri('http://my.51job.com/my/passport_login.php'); $client->setMethod('POST'); $client->setParameterPost(array( 'from_domain' => 'www.51job.com', 'passport_loginName' => '*****', // 账号 'passport_password' => '***' // 密码 )); $res = $client->request(); /** * 投简历 */ $client->setUri('http://my.51job.com/sc/sendtwo/send_resume_new.php'); $client->setHeaders('Host', 'my.51job.com'); $client->setHeaders('Cookie', $res->getHeader('Set-cookie')); $client->setMethod('GET'); $client->setParameterGet(array( 'isEN' => '0', 'rsmid' => '337097130', 'deflang' => '0', 'coverid' => '', 'jsoncallback' => 'jsonp1447931687767', '_' => '1447931692678', 'jobiduni' => '(73015544)', //括号里面为职位id )); $rs = $client->request(); print_r($rs);
不错,问题具有代表性
既然是https,那为啥不加上curl的https选项
应该是密码在前端做了hash加密,你可以抓个包看下

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
