ホームページ >ウェブフロントエンド >htmlチュートリアル >HTTP リクエストとデータのセキュリティ_html/css_WEB-ITnose
/*------------------------------------- 01 HTTP リクエスト---- ----------------------------------*/
重要なポイント: 1. ハイパーテキスト転送プロトコル 2. http。リクエストプロセス
{
1> http プロトコル: ハイパーテキスト転送プロトコル
{
http プロトコルは、モバイル クライアントでも PC でも、ネットワーク開発で最も一般的に使用されるプロトコルです。
http プロトコルは、あらゆる種類のデータの送信を許可します。
t t プロトコルは、それぞれのデータを制限します。サーバーがクライアントのリクエストに応答した後、接続はすぐに切断されます。この方法を使用すると、
の 2 つのステップに分かれます。
リクエスト: クライアントはサーバーにデータをリクエストします。「リクエスト ヘッダー」、「リクエスト本文」の 3 つの部分。 「リクエストヘッダー」: クライアントの環境説明、要求されたホストアドレスが含まれます。 Accept -Language: zh-cn // クライアントの言語環境Accept-Encoding: gzip // クライアントがサポートするデータ圧縮形式
Host: m.baidu.com //クライアントがアクセスしたいサーバーのホスト アドレス
ユーザーエージェント: Mozilla/5.0 (Macintosh; Intel Mac OS 固有のデータ、ファイル/画像など)
}
<2> 応答: サーバークライアントが必要とするデータを返します
{
} http プロトコルでは次のように規定されています: 完全な http 応答には、「ステータス行」、「応答ヘッダー」、「エンティティコンテンツ」の 3 つの部分が含まれます。
'応答ヘッダー':サーバーの説明と返されたデータの説明
Content-Encoding: gzip // サーバーがサポートするデータ圧縮形式
Content-Length: 1528 // 返されたデータの長さ
Content -Type:Application/XHTML+XML; charset = utf-8 //戻りデータタイプ
日付:2015年6月15日09:06:46 GMT //応答時間サーバー:Apache //サーバータイプエンティティ コンテンツ: サーバーからクライアントに返される特定のデータ (画像/html/ファイル...)
iOS 開発では、http リクエストを送信するためのソリューションが多数あります。一般的なものは次のとおりです:
< ;1> Apple ネイティブ:
{
* cfnetwork:nsurl、純粋なc言語の最下層、一般的に使用されていません。 .
}
}
/*------------------------------------- - 02 GET と POST ----------------------------------*/
キーポイント: 1.GET とPOST 違いは何ですか? 2. POST メソッドを使用してログイン リクエストを送信します
{
<1> http メソッド:http プロトコルでは、さまざまなリソース操作に対応する多くのメソッドが定義されています。 GET メソッドと POST メソッド。
} }}}
2 & lt; パラメータ
{{
上記の操作はすべて実現できるので、実際の開発では、get メソッドと post メソッドを使用するだけで済みます。場合によっては、ログイン時にユーザー名やパスワードなどのデータをサーバーに送信する必要があります。 パラメーター: サーバーに渡される特定のデータを指します。
}
パラメータの受け渡しに反映されます。 GET の本質はサーバーからデータを取得することであり、GET リクエストはネットワーク キャッシュに保存されます。 SQLite データベース (パス: NSHomeDirectory())
キャッシュされたデータの表示 コマンドライン:
'cd file directory' (ファイルディレクトリを開く)
'ls' 現在のファイルの下のディレクトリを表示します
「sqlite3 キャッシュ.db」データベースを開きます
データキャッシュ
リクエストURLの後に?の形式でサーバーに送信されるパラメータが続き、「パラメータ名」=「パラメータ値」の形式でパラメータがつなぎ合わされ、複数のパラメータは & で区切られます。
注: GET の長さは制限されており、ブラウザごとに長さの制限が異なります。通常は 2~8K の間です。 POST の本質は、データをサーバーに送信することと、サーバーを取得することです。処理された結果は GET ほど効率的ではありません。POST リクエストはキャッシュされず、更新するたびにフォームを再送信する必要があります。サーバーに送信されるパラメーターは「リクエスト本文」に配置されます。
理論的には、POST によって送信されるデータ量に制限はありません。
アウトアウトアウトを通じて POST を通じて。
1>URL ではすべての文字が ASCII コードである必要があります。
2>URL には中国語と特殊記号 (スペースなど) を使用できません。 ;
したがって、URL に中国語が表示される場合は、パーセント記号の翻訳を追加する必要があります。
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
<5> POST ログイン リクエストを送信します:
注:
1> 変数リクエストを使用します: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
2> リクエストメソッドを指定します: request.HTTPMethod = @"POST";
3> body data: request.HTTPBody = data;
// リクエストボディ文字列をインスタンス化します
NSString *body = [NSString stringWithFormat:@"username=%@&password=%@",self.userName.text,self. password.text];
// 文字列をバイナリデータに変換します
NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];
4> 非同期ネットワークリクエストを送信します
[NSURLConnection sendAsynchronousRequest:request queue: [nsoperationequeue Mainqueue]完了ハンドラー:^(nsurlresponse *response、nsdata *data、nserror *connectionerror){ nsdata *data、// nserror *connectionError:接続エラーハンドリング- 03 ユーザー情報の保存-------------------------------------*/
重要ポイント: 1 . ユーザー情報が保存されます。
{
<1> ユーザーがログインに成功すると、ユーザー情報はユーザーのアカウントを入力するだけで保存されます。
1> ログインに成功し、ユーザー情報 (設定) を保存します
2> を再度入力すると、ユーザーが以前に保存した情報が直接表示されます。ユーザーの重複を避けるため Input.
// 設定はユーザー情報を保存します
-(void)savaUserInfo
{
// 設定オブジェクトをインスタンス化します (単一のケース)
ser = [NSUserDefaults standardUserDefaults];
// ユーザー名を保存します
u [user setObject: Self.username.text forkey: kitusernameKey]; // ユーザー情報を同期します
[[ User synchronize];
}
// ユーザー情報を設定に読み込みます
- (void)loaduserinfo{
s stardentuserdefaults];
{
// & lt; 1 & gt; ログインする必要があるのは 1 回だけであるため、アプリケーションには main.storyboard: アプリのホームページが必要です。 // // & lt; 2 & gt; ユーザーがログインに成功したかどうかを判断します (ユーザー情報がユーザー設定で保存されている場合)// 1 & gt;以前のログインが成功しました)、Main:Main:Main.Storyboardにジャンプして、Main:Storyboard
を直接入力しますアプリのメイン ページ: main.storyboard
<3> 問題: ユーザー パスワードはプレーン テキストで保存できません。パスワードのセキュリティ原則:
1> ローカルまたはサーバーでは許可されていません
2> ネットワーク上では、ユーザーのパスワードは許可されていません
ミッドウェイ海戦に関する興味深い事実。 (AF)
データ暗号化アルゴリズム:
1> 対称暗号化アルゴリズム: 暗号化と復号化は高速であり、暗号化に適している必要があります。
2> 非対称暗号化アルゴリズム: 公開キー暗号化、秘密キー暗号化を使用するか、秘密キー暗号化と公開キー暗号化を使用しますが、暗号化と暗号化の速度が遅く、小規模なデータの暗号化に適しています。
<5> ヒント:
openssl: は、主要な暗号化アルゴリズム、一般的に使用されるキーと証明書のカプセル化管理機能、および豊富なアプリケーション テストを提供する強力な Secure Sockets Layer パスワード ライブラリです。
ターミナルコマンド:
echo hello | OpenSSL MD5en
Echo Hello | OpenSSL Sha-SHA256
Echo Hello |
------------------------ 04 情報セキュリティ暗号化---------------- ---- ------------------*/
一般的に使用される暗号化方式: 1> Base64 2> MD5 3> HMAC 5> タイムスタンプ パスワードパスワードは動的に変更されます){
1&gt; base64をエンコードした後、データの長さが大きくなり、約1/3を追加します。 Base64运算:
// 将文件meinv.jpg 进行base64运算之後保存储for meinv.txt
base64 meinv.txt
base64 -D meinv.txt -o meinv.png文字列「hello」は Base 64 でエンコードされ、結果は次のようになります。 aGVsbG8=
echo "hello"
E // Base64 コーディングの結果 agvsbg8 = counter -encoding as string
echo Agvsbg8 = | Base64 -D
}}{
を大きなサイズに変換の整数特定の長さの 16 進数の文字列の変換プロセスは不可逆であることに注意してください。簡単。 1 バイトが変更されると、得られる MD5 の値は大きく異なります。
*4. 弱抵抗衝突: 元のデータと既知の元のデータと元のデータと元のデータと元のデータと元のデータデータと元のデータとそのMD5値は、同じMD5値(つまり、強力なデータ)を持つデータを見つけることが非常に困難です。同じMD5アプリケーションを使用しています。ただし、現在、ネットワーク上には、ハッシュプロセスを使用するパスワードのハッシュプロセスがありますアルゴリズムを使用し、キーとメッセージを入力として受け取り、メッセージ ダイジェストを出力として生成します。
1 *1. サーバーがリクエストを受信した後。 , 「乱数」を生成し、ネットワーク経由でクライアントに送信します。
*3. クライアントはそれを受け取り、「乱数」と「鍵」は HMAC-MD5 の演算を実行し、取得された構造体を として渡します。認証データをサーバーに送信
(実際にはEPASSに乱数を提供し、鍵もEpassに保存されます)
※4.時間、サーバーは、サーバー データベースに保存されている「乱数」とクライアントの「キー」を使用して HMAC-MD5 計算を実行します。サーバーの計算結果がクライアントから返された認証データと同じである場合、クライアントは合法であると考えられます。使用法 .
}}
5 & gt; タイムスタンプ パスワード (ユーザー パスワードの動的変更)
{
,,,,++++,,,,, { 計算はすべて異なる結果をもたらしますパスワードの安全性は完全に保証されます
原則: パスワードにはすべて異なります。
数分後、サーバーは受信し、応答します。この時点で、サーバーの現在時刻は、1 つの計算結果が正しい限り、検証できます。成功します! ------------ ------------------------*/
キーポイント: 1. キーチェーンアクセス
{
Apple は、キーチェーン アクセス用の iOS 7.0.3 バージョン SDK の後に発表します。キーチェーン アクセス インターフェイスは、純粋な C 言語です。
キーチェーンは、ユーザー パスワードのセキュリティを確保できる AES 256 暗号化アルゴリズムを使用します。
キーチェーン アクセス用のサードパーティ フレームワーク (SSKeychain)。C 言語フレームワークのカプセル化です。 注: ソース コードを確認する必要はありません。
キーチェーン アクセスのパスワードはどこに保存されていますか? Appleのみがユーザーのパスワードセキュリティを保護します。キーチェーンアクセス自体は、安全な AES 256 暗号化を使用します。そのため、使用する場合は、パスワードを直接渡すだけです。一意の場合、各アプリケーションのユニークな識別があります。 ----------06 指紋認証----------------------------- ------- ----*/
重要なポイント: 1. 指紋認証の使用方法
{
iPhone 5S 以降に指紋認証機能がリリースされました
指紋認証の目的機能は、モバイル支払いプロセスを簡素化することです。
{{1. 携帯電話システムのバージョンが iOS 8.0 以降であるかどうかを確認する必要があります。iOS 8.0 以降のみがサポートしています。
Float Version = [UIDevice currentDevice]。 floatValue; (@「システムのバージョンが低すぎます。最新のシステムにアップグレードしてください」);
return ;}
2. 実験用の指紋認識オブジェクト。現在のデバイスが指紋認識機能をサポートしているかどうか (touchid があるかどうか) を判断します。
1 & gt; インスタンス化された指紋認識オブジェクト
lacontext *lactx = [[ LAContext; alloc];
:null])
{//デバイスが指紋認識関数をサポートしていない場合、@"このデバイスは指紋認識機能をサポートしていません) :@"フィンガープリント ログイン" Reply:^(BOOL Success, NSERROR *ERROR) {{{ , 成功 // 成功した場合、指紋の入力が正しいことを意味します。
if (success) {
nslog (@ "指紋認識が成功しました!");
Log(@"指紋認識エラー、もう一度お試しください");