Heim >Schlagzeilen >Teilen von Interviewfragen für Tencent PHP-Programmierer im Jahr 2019
Verwandte Empfehlungen: „Zusammenfassung der PHP-Interviewfragen 2019 (Sammlung)“
1. Der Speicherverwaltungsmechanismus von PHP kann werden automatisch durchgeführt und unnötige Objekte gelöscht. PHP verwendet den Referenzzähl-GC-Mechanismus.
Jedes Objekt enthält einen Referenzzähler refcount. Jede Referenz ist mit dem Objekt verbunden und der Zähler wird um 1 erhöht. Wenn die Referenz den Wohnraum verlässt oder auf NULL gesetzt wird, wird der Zähler um 1 dekrementiert. Wenn der Referenzzähler eines Objekts Null erreicht, weiß PHP, dass Sie das Objekt nicht mehr verwenden müssen und gibt den von ihm belegten Speicherplatz frei.
Referenz: https://www.php.net/manual/zh/features.gc.refcounting-basics.php
2. Der Unterschied und die Verbindung zwischen Sitzung und CookieUnterschied: 1. Speicherort: Sitzung wird auf dem Server gespeichert und Cookie wird auf dem Client gespeichert.
2. Speicherform: Die Sitzung wird auf dem Server in Form eines Objekts gespeichert, und das Cookie wird auf dem Client in Form einer Zeichenfolge gespeichert.
3. Zweck: Cookies eignen sich zum Speichern persönlicher Einstellungen, Hobbys usw. Sitzungen eignen sich zur Kundenauthentifizierung
4. Pfad: Die Sitzung kann keine Pfade unterscheiden. Derselbe Benutzer greift zu a Während der Website sind alle Sitzungen von überall aus abrufbar. Wenn in Cookies Pfadparameter festgelegt sind, können Cookies unter verschiedenen Pfaden auf derselben Website nicht aufeinander zugreifen.
Sicherheit: Andere können die lokal gespeicherten COOKIEs nicht analysieren und aus Sicherheitsgründen Cookies verwenden.
6 Anzahl der im Domainnamen enthaltenen Cookies: IE7/8, Firefox: 50, Opera 30; Gesamtgröße der Cookies: Firefox und Safari erlauben Cookies bis zu 4097 Byte, Opera erlaubt Cookies bis zu 4096 Byte und Internet Explorer erlaubt Cookies bis zu 4097 Byte . 4095 Bytes; es wird allgemein angenommen, dass es für die Sitzung keine Größen- oder Mengenbeschränkung gibt.
Beziehung:
Sitzung erfordert Cookies, um ordnungsgemäß zu funktionieren. Wenn der Client Cookies vollständig deaktiviert, ist die Sitzung ungültig! Da es sich bei der Sitzung um einen vom Anwendungsserver verwalteten serverseitigen Speicherplatz handelt, generiert der Server eine eindeutige Sitzungs-ID, wenn der Benutzer eine Verbindung zum Server herstellt. Diese Sitzungs-ID wird als Kennung für den Zugriff auf den serverseitigen Sitzungsspeicherplatz verwendet .
Die SessionID-Daten werden auf dem Client gespeichert und im Cookie gespeichert. Wenn der Benutzer die Seite übermittelt, wird die SessionID an den Server übermittelt, um auf die Sitzungsdaten zuzugreifen. Dieser Prozess erfordert kein Eingreifen des Entwicklers. Sobald der Client das Cookie deaktiviert, wird auch die Sitzung ungültig.
3. So ändern Sie die Überlebenszeit von SESSION1. Legen Sie die vom Browser gespeicherte Sitzungs-ID (setcookie (session_name), session_id ()) fest () + $lifeTime, "/");2. Sie können den session_set_cookie_params (86400); verwenden, der mit SESSION geliefert wird, um die Lebensdauer der Sitzung festzulegen
3 session in php.ini. Der Wert des gc_maxlifetime-Parameters kann die Sitzungsüberlebenszeit ändern
Was sind die Methoden der PHP-Seitenumleitungheader('Location: http://www.baidu.com/') ; echo ''; echo '';
5. PDO, adoDB, PHPLib Vergleich der Datenbankabstraktionsschicht
PHP-Datenbankabstraktionsschicht bezieht sich auf die Middleware zwischen PHP-Logikprogrammcode und der Datenbank, die die zugrunde liegenden Operationen der Datenbank kapselt. PDO basiert auf PHP 5.1. Das Design übernimmt die Eigenschaften von PHP und ist einfach und benutzerfreundlich. Streng genommen sollte PDO als PHP 5. klassifiziert werden die SPL-Bibliotheken und sollte nicht als Datenabstraktionsschicht klassifiziert werden, da sie ähnliche Funktionen wie die MySQL- und MySQLi-Erweiterungsbibliotheken hat. PDO eignet sich nicht für den Einsatz in Systemen, in denen Änderungen an der Datenbank geplant oder möglich sind.
ADODB Die Methode zum Zugriff auf die Datenbank ist unabhängig von der Back-End-Datenbank dieselbe.
Beim Übertragen der Datenbankplattform muss der Programmcode nicht zu stark geändert werden. Tatsächlich muss nur die Datenbankkonfigurationsdatei geändert werden. Der Zweck besteht darin, diese Anweisungen am unteren Ende der Abstraktionsschicht für verschiedene Datenbanken zu übersetzen, um sie an unterschiedliche Datenbankdialekte anzupassen.
Aber diese Abstraktionsebene scheint zu groß zu sein. Wenn Sie eine kleine Website erstellen, scheint dies zu groß zu sein.
PHPLib ist möglicherweise zu groß mit PHP. Die älteste Datenbankabstraktionsschicht (im Vergleich zu ADODB handelt es sich jedoch nur um eine abstrakte MySQL-Klassenbibliothek). Diese abstrakte Klasse ist recht einfach zu verwenden und klein. Sie ist eine gute Wahl für die Entwicklung kleiner Websites.
PDO bietet vorbereitete Anweisungsabfragen, Fehler- und Ausnahmebehandlung, flexible Erfassung von Abfrageergebnissen (zurückgegebene Arrays, Zeichenfolgen, Objekte, Rückruffunktionen), Zeichenfilterung zur Verhinderung von SQL-Angriffen, Transaktionsverarbeitung und gespeicherte Prozeduren.
ADODB unterstützt zwischengespeicherte Abfragen, mobile Datensatzsätze (HTML, Paging, Generierung von Auswahlmenüs), Transaktionsverarbeitung und Ausgabe in Dateien.
Referenz: http://apps.hi.baidu.com/share/detail/463678
Der Unterschied und die Verwendung von langer und kurzer VerbindungLange Verbindung: Der Client und der Server stellen zunächst eine Verbindung her. Nachdem die Verbindung hergestellt wurde, wird sie nicht getrennt und sendet und empfängt dann Nachrichten. Auf diese Weise besteht die Kommunikationsverbindung immer. Diese Methode wird häufig für die P2P-Kommunikation verwendet.
Kurze Verbindung: Der Client und der Server kommunizieren nur bei jeder Transaktion zum Senden und Empfangen einer Nachricht miteinander und die Verbindung wird sofort nach Abschluss der Transaktion getrennt. Diese Methode wird häufig für die Punkt-zu-Mehrpunkt-Kommunikation verwendet. C/S-Kommunikation.
Zeit für die Verwendung einer langen Verbindung und einer kurzen Verbindung:
Lange Verbindung:
Eine kurze Verbindung wird hauptsächlich für häufige Vorgänge, Punkt-zu-Punkt-Kommunikation und die Anzahl der verwendet Verbindungen können nicht zu viele sein. Der Aufbau jeder TCP-Verbindung erfordert drei Handshakes, und das Trennen jeder TCP-Verbindung erfordert vier Handshakes. Wenn Sie für jeden Vorgang eine Verbindung herstellen und dann erneut arbeiten müssen, verringert sich die Verarbeitungsgeschwindigkeit. Daher reicht es aus, bei jedem Vorgang und beim nächsten Vorgang Daten direkt zu senden, ohne eine TCP-Verbindung herzustellen. Beispielsweise führt die häufige Kommunikation mit kurzen Verbindungen zu Socket-Fehlern. Auch die häufige Socket-Erstellung ist eine Verschwendung von Ressourcen.
Kurze Verbindung:
Die http-Dienste von Webseiten nutzen im Allgemeinen kurze Verbindungen. Denn lange Verbindungen verbrauchen eine gewisse Menge an Ressourcen für den Server. Bei Tausenden oder sogar Hunderten Millionen Clientverbindungen wie Websites, die so häufig sind, kann die Verwendung kurzer Verbindungen einige Ressourcen sparen. Stellen Sie sich vor, wenn lange Verbindungen verwendet werden, Tausende von Benutzern gleichzeitig verwendet werden und jeder Benutzer eine Verbindung belegt, können Sie sich vorstellen, wie viel Druck auf den Server ausgeübt wird. Daher ist die Parallelität groß, aber jeder Benutzer benötigt eine kurze Verbindung, wenn er keine häufigen Vorgänge benötigt.
7. Detaillierte Erklärung und Anwendung des HTTP-Protokolls
http (Hypertext Transfer Protocol) ist eine zustandslose, kurze Verbindung, flexibel, Protokolle der Anwendungsschicht basieren oft auf TCP Verbindungen.
Referenz: https://www.php.cn/faq/437523.html (ausführliche Erläuterung des http-Protokolls)
(HTTP-Antwortstatuscode)
HTTP-Antwortstatuscode
Der Statuscode besteht aus drei Ziffern. Die erste Zahl definiert die Antwortkategorie und hat fünf mögliche Werte:
1xx: Anweisungsinformationen – stellt die Anfrage dar wurde empfangen, Verarbeitung fortsetzen
2xx: Erfolgreich – Zeigt an, dass die Anfrage erfolgreich empfangen, verstanden und akzeptiert wurde
3xx: Weiterleiten – Weitere Vorgänge müssen durchgeführt werden, um die Anfrage abzuschließen
4xx: Clientfehler – die Anfrage hat einen Syntaxfehler oder die Anfrage kann nicht erfüllt werden
5xx: Serverfehler – der Server konnte eine legitime Anfrage nicht erfüllen
Allgemeine Statuscodes, Statusbeschreibung und Erklärung:
200 OK // Client-Anfrage erfolgreich
400 Bad Request // Client-Anfrage weist einen Syntaxfehler auf und kann vom Server nicht verstanden werden
401 Nicht autorisiert / / Die Anfrage ist nicht autorisiert, dieser Statuscode muss zusammen mit dem WWW-Authenticate-Header-Feld verwendet werden. 403 Verboten // Der Server hat die Anfrage empfangen, sich jedoch geweigert, den Dienst bereitzustellen
404 Nicht gefunden / / Die angeforderte Ressource ist nicht vorhanden, z. B.: Geben Sie eine falsche URL ein
500 Interner Serverfehler // Ein unerwarteter Fehler ist im Server aufgetreten
503 Server nicht verfügbar // Server-Timeout // Kann zurückkehren zu normal
304 Nicht geändert / / Die angeforderte Webseite wurde seit der letzten Anfrage nicht geändert.
// Wenn der Server diese Antwort zurückgibt, gibt er den Webseiteninhalt nicht zurück.
8. Kommunikationsverschlüsselungsschema in der heterogenen Systemkommunikation
Referenz: https://www.php.cn/php-weizijiaocheng-437530
9. Socket-Verbindungsschritte
Socket-Konzept
Socket ist der Eckpfeiler der Kommunikation und die grundlegende Betriebseinheit, die die Netzwerkkommunikation von TCP unterstützt /IP-Protokoll. Es handelt sich um eine abstrakte Darstellung des Endpunkts im Netzwerkkommunikationsprozess und enthält fünf Arten von Informationen, die für die Netzwerkkommunikation erforderlich sind: das für die Verbindung verwendete Protokoll, die IP-Adresse des lokalen Hosts, den Protokollport des lokalen Prozesses und die IP-Adresse des Remote-Hosts und das Protokoll des Remote-Ports.
Socket-Verbindungsprozess
Der Aufbau einer Socket-Verbindung erfordert mindestens ein Paar Sockets, von denen einer auf dem Client läuft (ClientSocket genannt), und der andere auf dem Server läuft (ServerSocket genannt)
Der Verbindungsprozess zwischen Sockets kann in drei Schritte unterteilt werden: Serverüberwachung, Clientanforderung und Verbindungsbestätigung.
Serverüberwachung: Der serverseitige Socket findet den spezifischen Client-Socket nicht, sondern wartet auf eine Verbindung und überwacht den Netzwerkstatus in Echtzeit.
Client-Anfrage: Bezieht sich auf eine Verbindungsanforderung, die vom Socket des Clients gestellt wird, und das zu verbindende Ziel ist der Socket des Servers. Dazu muss der Socket des Clients zunächst den Socket des Servers beschreiben, mit dem er eine Verbindung herstellen möchte, die Adresse und Portnummer des serverseitigen Sockets angeben und dann eine Verbindungsanforderung an den serverseitigen Socket stellen.
Verbindungsbestätigung: bedeutet, dass, wenn der serverseitige Socket die Verbindungsanforderung vom clientseitigen Socket abhört oder empfängt, er dem Client antwortet
Socket-Anfrage, erstellen Sie einen neuen Thread und senden Sie die Beschreibung des serverseitigen Sockets an den Client. Sobald der Client diese Beschreibung bestätigt, wird die Verbindung hergestellt. Der serverseitige Socket befindet sich weiterhin im Überwachungsstatus und empfängt weiterhin Verbindungsanfragen von anderen Client-Sockets.
10. TCP-Protokoll, Drei-Wege-Handshake, Vier-Wege-Welle
TCP-Protokoll (Transmission Control Protocol) ist ein Host-zu-Host-Übertragungssteuerungsprotokoll , Bereitstellung zuverlässiger Verbindungen. Der Dienst verwendet einen Drei-Wege-Handshake, um den Aufbau einer Verbindung zu bestätigen, und einen Vier-Wege-Handshake, um die Verbindung zu trennen. Der
Bitcode ist das TCP-Flag, und es gibt 6 Arten von Markierungen:
SYN (synchroner Verbindungsaufbau) synchron
ACK (Bestätigung)
PSH (Push-Übertragung)
FIN (Ende beenden)
RST (Zurücksetzen zurücksetzen)
URG (dringend dringend)
11. PHP-Medium Differenzierung und Beispiele häufig verwendeter Funktionen mit ähnlichen Funktionen, aber stark unterschiedlicher Leistung
Referenz: http://apps.hi.baidu.com/share/detail/43169774
12. Posix- und Perl-kompatibler Regex-Vergleich und Funktionsleistungsanalyse
Die wichtigsten Unterschiede zwischen POSIX-Regex und PCRE-Regex, die Sie kennen müssen:
1 . Die PCRE-Funktion erfordert ein Muster, um den Zeichenabschluss zu trennen.
2. POSIX-kompatible reguläre Ausdrücke haben keinen Modifikator. Im Gegensatz zu POSIX verfügt die PCRE-Erweiterung nicht über dedizierte Funktionen für den Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung. Stattdessen verwendet der Support den Modusmodifikator /i, um denselben Zweck zu erfüllen. Andere Mustermodifikatoren können ebenfalls verwendet werden, um die Übereinstimmungsstrategie zu ändern.
3 Die POSIX-Funktion sucht von ganz links nach der längsten Übereinstimmung, PCRE stoppt jedoch nach der ersten zulässigen Übereinstimmung. Es macht keinen Unterschied, wenn die Zeichenfolgen nicht übereinstimmen
, aber wenn sie übereinstimmen, gibt es einen Unterschied in den Ergebnissen und in der Geschwindigkeit. Um den Unterschied zu veranschaulichen, betrachten Sie das folgende Beispiel (aus Jeffrey Friedls Buch „Mastering Regular Expressions“), um die Zeichenfolge „oneselfsufficient“ abzugleichen. Bei Verwendung von POSIX lautet das Ergebnis jedoch Die gesamte Zeichenfolge ist ausreichend. Beide Teilzeichenfolgen stimmen mit der Originalzeichenfolge überein, aber POSIX benötigt als Ergebnis die längste Zeit.
PCRE Verfügbare Modifikatoren: (i,s,m)
13. Implementieren Sie reguläre PERL-Ausdrücke und erfassen Sie alle href-Hyperlinks des a-Tags von HTML-Dateien
Regulärer Ausdruck: /b4ddbcb7191fb2af9a37334206af3803]/is
$html = 4782e89dca371a3b9dff3e159318fa67]/is", $html, $matches ); print_r ($matches [1]); // Alle Hyperlinks ausgeben
?>
14. Vergleich vordefinierter Variablen, magischer Variablen, magischer Methoden und Beispiele ihrer Funktionen
Vordefinierte Variablen (superglobale Variablen)
$GLOBALS
$_SERVER
$_GET
$_POST
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
Magische Methode http://apps.hi.baidu.com/share/detail/17851228
konstruieren und zerstören
__autoload
Abrufen und Festlegen
Ein- und Ausschalten
Anrufen und CallStatic
__clone
__toString
Ruhezustand und Aufwachen
__invoke
Magische Variable http://apps.hi.baidu.com/share/detail/17851228
LINE
DATEI
DIR
KLASSE
FUNKTION
METHODE
NAMESPACE
15. spl gemeinsame Datenstrukturklassen
16. PHP-Entwurfsmuster
Factory-Muster
Erstellen Sie eine Factory (eine Funktion oder eine Klassenmethode), um neue Objekte zu erstellen
Factory Pattern ist eine Klasse mit bestimmten Methoden, die Objekte für Sie erstellen. Sie können eine Factory-Klasse verwenden, um Objekte zu erstellen, ohne new direkt zu verwenden. Wenn Sie auf diese Weise den Typ des erstellten Objekts ändern möchten, müssen Sie nur die Fabrik ändern. Der gesamte Code, der diese Fabrik verwendet, wird automatisch geändert.
Singleton-Muster
Einige Anwendungsressourcen sind exklusiv, da es nur eine Ressource dieses Typs gibt. Beispielsweise sind Verbindungen zu einer Datenbank über ein Datenbank-Handle exklusiv. Sie möchten das Datenbank-Handle in Ihrer Anwendung gemeinsam nutzen, da es einen Mehraufwand verursacht, wenn die Verbindung geöffnet oder geschlossen bleibt, insbesondere beim Abrufen einer einzelnen Seite.
Der Einzelelementmodus kann diese Anforderung erfüllen.
Das Singleton-Muster in PHP: bezieht sich auf die Erstellung nur einer Instanz einer bestimmten Klasse im Rahmen einer PHP-Anwendung.
Klassen, die das Singleton-Muster in PHP verwenden, verfügen normalerweise über einen privaten Konstruktor und eine private Klonfunktion, um zu verhindern, dass Benutzer es instanziieren, indem sie ein Objekt erstellen oder es klonen. Es gibt auch eine statische private Mitgliedsvariable $instance und eine statische Methode getInstance. getInstance ist dafür verantwortlich, sich selbst zu instanziieren und dieses Objekt dann in der statischen Mitgliedsvariablen $instance zu speichern, um sicherzustellen, dass nur eine Instanz erstellt wird.
Beobachtermodus
Befehlskettenmodus
Strategiemodus
17. Lastbalanciertes Webanwendungsserverdesign, wie z. B. youku
Leitfaden zum Lastausgleich mit PHP
Überlegen Sie, wie Sie mit den folgenden Problemen umgehen können?
参考:https://www.php.cn/php-weizijiaocheng-437532.html
在 Apache 负载均衡的情况下,做 PHP 开发如何考虑一下几方面:
PHP 源文件在服务器、PHP 文件上传处理、相关配置文件、Session 会话放置、日志放置
Apache 负载均衡的原则
轮询均衡策略 (轮询转发请求)
按权重分配均衡策略 (按响应数量转发请求)
权重请求响应负载均衡策略 (按响应流量转发请求)
18. 如何优化前端性能
1) 页面内容的优化
a) 降低请求数
合并 css、js 文件,集成 CSS 图片
b) 减少交互通信量
压缩技术:压缩 css、js 文件,优化图像,减少 cookie 体积;
合理利用缓存:使用外部 js/css 文件,缓存 ajax;
减少不必要的通信量:剔除无用脚本和样式、推迟加载内容、使用 GET 请求
c) 合理利用 “并行” 尽量避免重定向
慎用 Iframe 样式表置于顶部 脚本放到样式后面加载
d) 节约系统消耗
避免 CSS 表达式、滤镜
2) 服务器的优化
a) b)
c)
d)
19. yahoo 的 34 条前端优化法则
减少 HTTP 请求、利用 CDN 技术、 设置头文件过期或者静态缓存、Gzip 压缩、把 CSS 放顶部、 把 JS 放底部、避免 CSS 表达式、将 JS 和 CSS 外链、减少 DNS 查找、减小 JS 和 CSS 的体积、 避免重定向、删除重复脚本、 配置 ETags、缓存 Ajax、尽早的释放缓冲、
用 GET 方式进行 AJAX 请求、延迟加载组件、 预加载组件、减少 DOM 元素数量、跨域分离组件、
减少 iframe 数量、不要出现 404 页面、减小 Cookie、 对组件使用无 Cookie 的域名、减少 DOM 的访问次数、开发灵活的事件处理句柄、使用 2cdf5bf648cf2f33323966d7f58a7f3f 而非 @import、避免过滤器的使用、优化图片、优化 CSS Sprites、 不要在 HTML 中缩放图片、缩小 favicon. ico 的大小并缓存它、保证组件在 25K 以下、将组件打包进一个多部分的文档中
20. 数据库缓存的基本理论,参考 memcached
什么是 Memcached?
memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
虽然 memcached 使用了同样的 “Key=>Value” 方式组织数据,但是它和共享内存、APC 等本地缓存有非常大的区别。Memcached 是分布式的,也就是说 它不是本地的。它基于网络连接(当然它也可以使用 localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon 方式)
PHP 与 Memcached
Memcached 使用 libevent 库实现网络连接服务,理论上可以处理无限多的连接,但是它和
基于反向代理的 Web 缓存;
基于反向代理的 Web 缓存
21. PHP 安全模式
php 安全模式:safe_mode=on|off
启用 safe_mode 指令将对在共享环境中使用 PHP 时可能有危险的语言特性有所限制。可以将 safe_mode 是指为布尔值 on 来启用,或者设置为 off 和脚本尝试访问的文件的 UID,以此作为限制机制的基础。如果 UID 相同,则执行脚本;否则,脚本失败。
当启用安全模式时,一些限制将生效
1、 所有输入输出函数(例如 fopen ()、file () 和 require ())的适用会受到限制,只能用于与调用这些函数的
脚本有相同拥有者的文件
2、 如果试图通过函数 popen ()、system () 或 exec () 等执行脚本,只有当脚本位于 safe_mode_exec_dir
配置指令指定的目录才可能
3、HTTP 验证得到进一步加强,因为验证脚本用于者的 UID 划入验证领域范围内。此外,当启用安
全模式时,不会设置 PHP_AUTH。
4、如果适用 MySQL 数据库服务器,链接 MySQL 服务器所用的用户名必须与调用 mysql_connect ()
的文件拥有者用户名相同。
以下是一些和安全模式相关的配置选项
safe_mode_gid=on|off safe_mode_include_dir=string safe_mode_env_vars=string safe_mode_exec_dir=string safe_mode_protected_env_vars=string
22. 常见的 web 攻击方式
常见攻击
XSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入的恶意 html 代码会被执行,从而达到恶意用户的特殊 目的。
XSS ist ein passiver Angriff, da er passiv und schwer auszunutzen ist und viele Menschen seine Schädlichkeit oft ignorieren. Mit der kontinuierlichen Weiterentwicklung der Frontend-Technologie und der steigenden Anzahl an Anwendungen von Rich Clients hat dieses Thema jedoch immer mehr Aufmerksamkeit auf sich gezogen.
Ein einfaches Beispiel:
Wenn Sie derzeit ein Benutzer der SNS-Site sind und eine Sicherheitslücke in der Funktion zum Veröffentlichen von Informationen besteht, können Sie js ausführen, wenn Sie ein bösartiges Skript eingeben In diesem Moment wird jeder, der Sie derzeit sieht, dieses Skript ausführen, um eine Eingabeaufforderungsbox anzuzeigen (sehr coole Popup-Anzeigen:)). unvorstellbar sein.
CSRF (Cross Site Request Forgery), Cross-Site Request Forgery. Wie der Name schon sagt, ermöglicht es Benutzern, ihre eigene Identität zu verwenden, um einige der Ziele zu erreichen, die der Angreifer erreichen muss, indem er ohne Wissen des Benutzers Verbindungsanfragen fälscht. Der Angriff von csrf unterscheidet sich von dem von xss csrf, der durch das aktive Verhalten des Angreifers ausgelöst werden muss. Das hört sich an, als ob der Verdacht des „Abfischens“ bestehe.
Multi-Window-Browser scheinen in dieser Hinsicht zur Tyrannei beizutragen, da das neu geöffnete Fenster alle aktuellen Sitzungen enthält. Wenn es sich um ein einzelnes Browserfenster ähnlich dem IE6 handelt, wird es kein solches Problem geben, weil jedes Zeit Jedes Fenster ist ein unabhängiger Prozess.
Geben Sie mir ein einfaches Beispiel: Sie spielen White Society und sehen, wie jemand einen Link sendet. Sie klicken darauf und dann wird in diesem Link ein Formular zum Senden von Geschenken erstellt . Das Problem Sichtbar allgemein.
Cookie-Hijacking. Indem Sie die Berechtigungen der Seite einholen, schreiben Sie eine einfache Anfrage an die bösartige Website auf der Seite und übertragen Sie das Cookie des Benutzers. Nachdem Sie das Cookie erhalten haben, können Sie sich über das Cookie direkt auf der Website anmelden. Das ist Cookie-Hijacking.
Ein einfaches Beispiel: Jemand hat ein sehr interessantes Tagebuch geschrieben und es dann mit allen geteilt. Viele Leute haben geklickt, um das Tagebuch anzusehen und es zu teilen. Aber die Person, die das Tagebuch geschrieben hat, hat es nicht getan. Eine Anfrage nach außerhalb der Website wird heimlich im Protokoll versteckt. Dann sendet jeder, der dieses Protokoll liest, sein Cookie an jemanden, ohne es zu wissen, und kann es dann an jeden weitergeben, der sich in das Konto dieser Person einloggt.
SQL-Injection-Angriff
Bei einem SQL-Injection-Angriff fügt der Benutzer Informationen zu einer Datenbankabfrage hinzu, indem er ein Formular oder eine GET-Abfragezeichenfolge manipuliert.
DNS-Angriff
Denial-of-Service-Angriff
Denial-of-Service-Angriff bedeutet, dass der Angreifer versucht, den Zielcomputer daran zu hindern, Dienste bereitzustellen. Dies ist eine der häufigsten Angriffsmethoden von Hackern genutzt.
Der Angreifer führt einen Denial-of-Service-Angriff durch, der es dem Server tatsächlich ermöglicht, zwei Effekte zu erzielen: Zum einen wird er gezwungen, den Puffer des Servers zu füllen und neue Anfragen nicht anzunehmen, und zum anderen wird IP-Spoofing verwendet Erzwingen Sie, dass der Server die Verbindungen legitimer Benutzer umleitet. Zurücksetzen, was sich auf die Verbindung legitimer Benutzer auswirkt
23. Die Grundidee, Hotlinking in PHP zu verhindern. Anti-Hotlinking
Was ist Hotlinking?
Hotlinks beziehen sich auf Inhalte, die der Dienstanbieter selbst nicht bereitstellt. Er nutzt technische Mittel, um andere nützliche Endbenutzerschnittstellen (z. B. Werbung) zu umgehen und Endbenutzern direkt andere Dienste auf seiner eigenen Website bereitzustellen . Der Serviceinhalt des Anbieters wird von den Browsing- und Klickraten der Endbenutzer beeinflusst. Der Begünstigte stellt keine oder nur sehr wenige Ressourcen bereit, während der eigentliche Leistungserbringer keinen Nutzen erhält.
Website-Hotlinking verbraucht einen großen Teil der Bandbreite der Website mit gestohlenem Link, und die tatsächliche Klickrate kann sehr gering sein, was den Interessen der Website mit gestohlenem Link ernsthaft schadet. Wie verhindert man Hotlinking?
Dateien oder Verzeichnisse von Zeit zu Zeit umbenennen
Referenzseiten einschränken
Das Prinzip besteht darin, dass der Server die Website-Adresse der vom Benutzer übermittelten Informationen erhält und diese dann mit vergleicht Die tatsächliche Serveradresse. Wenn sie konsistent ist, bedeutet dies, dass sie innerhalb der Site oder für eine Site, der Sie vertrauen, übermittelt wurde. Andernfalls wird sie als Hotlink betrachtet. Bei der Implementierung können Sie HTTP_REFERER1- und htaccess-Dateien (mod_Rewrite muss aktiviert sein) in Kombination mit regulären Ausdrücken verwenden, um jeder Zugriffsanfrage des Benutzers zu entsprechen.
Dateitarnung
Dateitarnung ist derzeit die am häufigsten verwendete Anti-Leeching-Technologie, meist kombiniert mit serverseitigen dynamischen Skripten (PHP/JSP/ASP). Tatsächlich handelt es sich bei der vom Benutzer angeforderten Dateiadresse nur um eine getarnte Skriptdatei. Diese Skriptdatei authentifiziert die Anfrage des Benutzers und überprüft im Allgemeinen Sitzung, Cookie oder HTTP_REFERER als Grundlage für die Feststellung, ob es sich um einen Hotlink handelt. Die echten Dateien sind tatsächlich an Orten versteckt, auf die Benutzer nicht zugreifen können. Erst nachdem der Benutzer die Überprüfung bestanden hat, werden sie an den Benutzer zurückgegeben Die Benutzerinformationen des Clients werden dann basierend auf diesen Informationen und dem vom Benutzer als Authentifizierung angeforderten Dateinamen in eine Zeichenfolge (Sitzungs-ID) verschlüsselt. Erst nach erfolgreicher Authentifizierung sendet der Server die vom Benutzer benötigten Dateien an den Client. Im Allgemeinen übergeben wir die verschlüsselte Sitzungs-ID als Teil der URL-Parameter an den Server. Da diese Sitzungs-ID mit den Informationen des Benutzers verknüpft ist, kann die Sitzungs-ID die Identitätsauthentifizierung nicht bestehen, selbst wenn jemand anderes den Link stiehlt -Blutegel Zweck. Diese Methode ist für verteilte Hotlinks sehr effektiv.
Zufälliger Zusatzcode
每次,在页面里生成一个附加码,并存在数据库里,和对应的图片相关,访问图片时和此附加码对比,相同则输出图片,否则输出 404 图片
加入水印
24. HTTP 请求头信息和响应头信息
请求头信息
POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1 Host: 172.30.4.102 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0 Accept: / Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://172.30.4.102/scp1.1.0/index.php/prs... Content-Length: 1819 Cookie: ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache Cache-Control: no-cache
响应头信息
HTTP/1.1 200 OK Date: Fri, 02 Sep 2011 09:27:07 GMT Server: Apache/2.2.3 (Red Hat) X-Powered-By: PHP/5.1.6 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 31 Connection: close Content-Type: text/html; charset=UTF-8
25. MySQL
MySQL 数据库性能优化
使用 mysqlreport;
正确使用索引:explain 分析查询语句,组合索引,索引副作用(占空间、update)
开启慢查询日志、使用慢查询分析工具 mysqlsla;
索引缓存、索引代价(插入更新索引);
表锁,行锁,行锁副作用(update 多时候变慢),在 select 和 update 混合的情况下,行锁巧妙解决了读写互斥的问题;
开启使用查询缓存;
修改临时表内存空间;
开启线程池;
MySQL Query 语句优化的基本思路和原则
1、优化需要优化的 Query;
2、定位优化对象的性能瓶颈;
3、明确优化目标;
4、从 Explaing 入手;
5、多使用 Profile;
6、永远用小结果集推动大的结果集;
7、尽可能在索引中完成排序;
8、只取自己需要的 Columns;
9、仅仅使用最有效的过滤条件;
10、尽可能避免复杂的 Join 和子查询。
MySQL 中 MyISAM 引擎和 InnoDB 引擎的区别以及它们的性能
1:Innodb 支持事物,Myisam 不支持
2:锁定机制不一样,Myisam 支持表锁定,而 Innodb 支持行锁
3:Myisam 不支持外键,Innodb 能支持
4:Myisam 能在特定环境下支持全文索引,而 Innodb 不支持
5:Myisam 支持数据压缩,Innodb 不支持
6:在数据存储上,Myisam 占用的空间少,Innodb 相对多些
7:Myisam 在批量插入和查询方面速度上有优势,而 Innodb 由于支持行锁,所以在数据修改方面更胜一筹
MySQL 存储引擎
MyISAM:不支持事务、表锁和全文索引,操作速度快
InnoDB:行锁设计、支持外键、支持安全事务
HEAP:数据存放在内存中,临时表
NDB Cluster:MySQL 的簇式数据库引擎
CSV: 存储引擎把数据以逗号分隔的格式存储在文本文件中。
FEDERATED:存储引擎表并不存放数据,它只是指向一台远程 MySQL 数据库服务器上的表 Archive: 只支持 INSERT 和 SELECT 操作,压缩后存储,非常适合存储归档数据
Merge:允许将一系列等同的 MyISAM 表以逻辑方式组合在一起,并作为 1 个对象引用它们 表类型,区分表类型
优化表设计的常用思路
负载均衡的数据库设计
数据类型及详细定义,区分
26. Apache
性能优化,配置,fastCGI 等几种工作模式
27. Ajax
用 JS 实现 Ajax 功能
var createXHR = function(){ } var addURLParam = function(url, name, value){ } var xhr = createXHR(); xhr.onreadystatechange = function(){ } var url = 'testAjax.php'; addURLParam(url, 'name', 'linjm'); xhr.open('get',url,true); xhr.send(NULL); if(xhr.readyState == 4){ } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){ } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){ } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{}
28. Javascript
变量、作用域、作用域链.