目次
返信内容:
はじめに
分析
計画
Chrome に似た最新のブラウザを使用しています。通常は https://segmentfault.com/user/login にアクセスし、F12 キーを押して、network パネルを選択してリクエストの監視を開始します。 、その後、アカウントとパスワードを任意に入力し、クリックしてログインします。
ここでは、サーバーによって検証されたパラメーターをテストするためのコードを単純に記述するために、nodejs を使用します。
同時に、オープンソースはGitHubのアドレスsegmentfault_loginerにあります
ホームページ バックエンド開発 PHPチュートリアル PHPでcurlを使用してログインセグメントフォールトをシミュレートするにはどうすればよいですか?

PHPでcurlを使用してログインセグメントフォールトをシミュレートするにはどうすればよいですか?

Jul 06, 2016 pm 01:53 PM
php

リーリー

返信内容:

リーリー

はじめに

この記事は、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それでは、ここを見てみましょう:
リーリー

コードは非常に単純です。リクエスト結果のステータスが 0 の場合、ログインが成功したことを意味します。同時に、バックグラウンドで実行されるログイン リクエスト ページにアクセスしてみましょう。 404になります。これは、サーバーが入力を検証し、リクエストが通常のロジックに準拠していないと判断したことを示しています。次に、リクエスト ヘッダーの作成を開始します。

/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 を返すかどうかを確認することです。

プロセスの詳細は説明しませんが、結果は次のとおりです。

    クエリ文字列の
  1. に対応します。

    _必须和Cookie中的PHPSESSID

  2. X-Requested-With的值需要带ajax请求标志,即XMLHttpRequest

  3. Refererの値

  4. サーバーがかなり厳しいようです。

ソースコード

リーリー

同時に、オープンソースはGitHubのアドレスsegmentfault_loginerにあります

PHPでcurlを使用してログインセグメントフォールトをシミュレートするにはどうすればよいですか?最初の部分は暗号化されていません、可能性の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加密,你可以抓个包看下

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

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

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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での後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

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

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

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

See all articles