Cet article partage avec vous des notes d'étude sur le développement de backends d'applications à haute disponibilité et haute sécurité en PHP. Les amis dans le besoin peuvent se référer au contenu de l'article
Adresse de téléchargement du code source : https://. download.csdn .net/download/qq_21683643/10331534
Répertoire
1. Sécurité
2. Algorithme de signature du code d'autorisation
3. Le jeton est unique Support sexuel
5. Support de demande unique API
6. Haute disponibilité
7. API reposante
8. Similitudes et différences entre la connexion Web et la connexion APP
9. Alibaba Scénario de connexion complexe de l'application client de la solution de vérification SMS
10. Solution de version de l'interface API
11. Solution cohérente avec l'heure locale et l'heure du serveur
12. Solution d'exception interne imprévisible de l'API
13. 🎜>14. Utilisez Qiniu Cloud pour résoudre les capacités de base du service de traitement d'images
15. Encapsulation des bibliothèques de classes de base
16.Pénétration des modèles de conception PHP
17.
18. Interaction de données asynchrones entre PHP et ajax
Format de structure de données.
3. Le code d'état HTTP est implémenté à l'aide du propre json de TK
3. code de statut de l'entreprise
4. message d'invite
5. couche de données de données
Encapsulation des données de l'interface API universelle
function show($status, $message, $data=[], $httpCode=200) { $data = [ 'status' => $status, 'message' => $message, 'data' => $data, ]; return json($data, $httpCode); }
class ApiHandleException extends Handle { /** * http 状态码 * @var int */ public $httpCode = 500; public function render(\Exception $e) { // 还原正常报错,上线后为flase(服务端开发) if(config('app_debug') == true) { return parent::render($e); } if ($e instanceof ApiException) { $this->httpCode = $e->httpCode; } return show(0, $e->getMessage(), [], $this->httpCode); } }class ApiException extends Exception { public $message = ''; public $httpCode = 500; public $code = 0; /** * @param string $message * @param int $httpCode * @param int $code */ public function __construct($message = '', $httpCode = 0, $code = 0) { $this->httpCode = $httpCode; $this->message = $message; $this->code = $code; } }
La solution est un cryptage varié : MD5 AES (cryptage symétrique) RSA (asymétrique, faible efficacité) signe (heure de validité, unicité)
/** * 生成每次请求的sign * @param array $data * @return string */ public static function setSign($data = []) { // 1 按字段排序 ksort($data); // 2拼接字符串数据 & $string = http_build_query($data); // 3通过aes来加密 $string = (new Aes())->encrypt($string); return $string; }/** * 检查sign是否正常 * @param array $data * @param $data * @return boolen */ public static function checkSignPass($data) { $str = (new Aes())->decrypt($data['sign']); if(empty($str)) { return false; } // diid=xx&app_type=3 parse_str($str, $arr); if(!is_array($arr) || empty($arr['did']) || $arr['did'] != $data['did'] ) { return false; } // 有效时间:时间间隔不能超过60s if(!config('app_debug')) { if ((time() - ceil($arr['time'] / 1000)) > config('app.app_sign_time')) { return false; } //echo Cache::get($data['sign']);exit; // 唯一性判定 if (Cache::get($data['sign'])) { return false; } } return true; }/** * 检查每次app请求的数据是否合法 */ public function checkRequestAuth() { // 首先需要获取headers $headers = request()->header(); // todo // sign 加密需要 客户端工程师 , 解密:服务端工程师 // 1 headers body 仿照sign 做参数的加解密 // 2 // 3 // 基础参数校验 if(empty($headers['sign'])) { throw new ApiException('sign不存在', 400); } if(!in_array($headers['app_type'], config('app.apptypes'))) { throw new ApiException('app_type不合法', 400); } // 需要sign if(!IAuth::checkSignPass($headers)) { throw new ApiException('授权码sign失败', 401); } Cache::set($headers['sign'], 1, config('app.app_sign_cache_time')); // 1、文件 2、mysql 3、redis $this->headers = $headers; }
Solution 2 : Transmettre l'horodatage lors de l'initialisation de l'application, heure du client = horodatage du serveur + différence
3. Écriture du document de l'interface API (paramètre d'entrée API, format du paramètre de sortie)
Adresse de l'interface API Méthode de requête Format du paramètre d'entrée de publication Format du paramètre de sortie Code http
4. Développement commercial de mise à niveau de la version de l'application
Conception de la tableCRÉER UNE TABLE
(
ent_version
int(10 ) unsigned NOT NULL, id
varchar(20) NOT NULL DEFAULT ” COMMENT 'type d'application tel que iOS Android', app_type
int(8) unsigned NOT NULL DEFAULT '0 ' COMMENT 'Version interne number', version
varchar(20) NOT NULL DEFAULT ” COMMENT 'Numéro de version externe tel que 1.2.3', version_code
tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Que ce soit forcer la mise à jour 0 non, 1 forcer la mise à jour', is_force
varchar(255) NON NULL PAR DÉFAUT ” COMMENTAIRE 'dernière adresse apk', apk_url
varchar(500) NON NULL PAR DÉFAUT ” COMMENTAIRE 'Invite de mise à niveau' , upgrade_point
tinyint(1) NON NULL PAR DÉFAUT '0' COMMENTAIRE 'Statut', status
int(10) unsigned NON NULL PAR DÉFAUT '0', create_time
int (10) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; update_time
5. Développement de connexion
1.1 Introduction au développement commercial de connexion d'application En général, les applications ont deux états : connecté et non connecté
Pourquoi devez-vous vous connecter ? Utilisateurs miniers, interagissant et communiquant
Comment se connecter à l'APP ? Imitez d'autres connexions à l'application
Autres méthodes de connexion : code de vérification du numéro de téléphone mobile sans mot de passe, mot de passe du compte
Méthodes de connexion tierces : autorisation QQ, autorisation WeChat, autorisation Weibo
1.2 Conception de la structure de la table de connexion de l'application
🎜> CREATE TABLE
( ent_user
int(10) unsigned NOT NULL COMMENT 'primary key', id
varchar(20) NOT NULL DEFAULT ” COMMENT 'username', username
char(32) NON NULL PAR DÉFAUT ” COMMENTAIRE 'Mot de passe', password
varchar(11) NON NULL PAR DÉFAUT ” COMMENTAIRE 'Numéro de téléphone portable', phone
varchar(100) NON NULL PAR DÉFAUT ” COMMENTAIRE 'jeton de commande', token
int(10) non signé NON NULL PAR DÉFAUT '0' COMMENTAIRE 'Délai d'expiration du jeton', time_out
varchar(200) NON NULL PAR DÉFAUT ” COMMENTAIRE 'avatar',
image
tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Sexe 0 mâle 1 femelle', sex
varchar(200) NOT NULL DEFAULT ” COMMENT 'Signature personnelle', signature
int (10) non signé NON NULL PAR DÉFAUT '0' COMMENTAIRE 'Heure d'inscription', create_time
int(10) non signé NON NULL PAR DÉFAUT '0' COMMENTAIRE 'Heure de connexion', update_time
tinyint(1 ) NOT NULL DEFAULT '0' COMMENT 'Le statut est-il verrouillé'
) ENGINE=InnoDB DEFAULT CHARSET=utf8; status
1.3 Introduction à la plateforme de services de communication Alibaba Cloud
Qu'est-ce qu'Alibaba
Alibaba fournit des services, notamment SMS , voix et autres services personnalisés
1.4 Développement de la fonction d'envoi de code de vérification SMS
1.5Algorithme d'unicité du jeton de connexion de l'application
L'application appelle la connexion, le serveur renvoie des informations de jeton cryptées, chaque fois que l'application demande l'interface, elle doit apporter le jeton
L'application génère un jeton unique et le crypte : jeton =jeton+horodatage 13 bits
1.6Connexion à l'application par mot de passe
Le nom d'utilisateur et le mot de passe doivent être cryptés et transmis au serveur
Anomalies côté application, surveillance des performances et positionnement. analyse
Situation de base des exceptions côté APP :
Crach Un crash soudain s'est produit lors de l'utilisation de l'App
Bégaiement et décalage d'écran
anomalie d'exception dans le programme
pop-up ANR boîte ne demandant aucune réponse (Android)
Plan de collecte de données :
Établir une table de performances d'exception et développer une interface API
id clé primaire
app_type type d'application
version_code numéro de version
Modèle d'appareil modèle
Est-ce que l'identifiant de l'appareil
type en utilisant utiliser une plateforme tierce utiliser utiliser ‐ pour Données statistiques, telles que : Umeng Statistics
7. Solution de service de transmission de messages APP
Sondage méthode : APP envoie régulièrement des requêtes http au serveur pour voir s'il y a un message
Plateforme tierce : Serveur->Plateforme tierce->app
Recommandations associées :
Quelques problèmes de sécurité de développement PHP compilés
PHP Explication détaillée des principes et de l'utilisation du développement de session
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!