Heim PHP-Framework Denken Sie an PHP Sicherheitsüberlegungen für ThinkPHP

Sicherheitsüberlegungen für ThinkPHP

Dec 16, 2019 pm 05:33 PM
thinkphp Sicherheitsvorkehrungen

Sicherheitsüberlegungen für ThinkPHP

In diesem Artikel werden hauptsächlich die Sicherheitsvorkehrungen von ThinkPHP besprochen, die als empfohlene Sicherheitsstandardpraxis von ThinkPHP verwendet werden können.

Erstens gibt es keine absolute Sicherheit. Solange Sie über genügend Sicherheitsbewusstsein verfügen, können Sie Sicherheitsrisiken so weit wie möglich ausschließen. Durch die standardmäßige Verwendung des Frameworks können Sie einige scheinbar naive Sicherheitsprobleme vermeiden. Die in diesem Artikel beschriebenen Sicherheitsvorkehrungen beziehen sich hauptsächlich auf die Sicherheitsstrategie in der Produktionsumgebung. Bei der lokalen Entwicklung steht die Sicherheit manchmal nicht im Vordergrund.

Unter Berücksichtigung der Entwicklungserfahrung legt ThinkPHP immer noch großen Wert auf die zugrunde liegende Sicherheit des Frameworks. Obwohl häufig Sicherheitslücken gemeldet werden, werden die Beamten diese und die meisten Schwachstellen so schnell wie möglich beheben Dies kann nur vermieden werden, wenn die Benutzer über ein gewisses Maß an Sicherheitsbewusstsein verfügen. In diesem Jahr haben wir auch Kooperationsbeziehungen mit mehreren inländischen Sicherheitsteams aufgebaut, die dabei helfen, mögliche Schwachstellen oder versteckte Gefahren im Voraus zu erkennen und umgehend zu beheben im Rahmen ausgenutzt werden.

Standardisierte Bereitstellung

Viele Entwickler schenken diesem Problem keine besondere Aufmerksamkeit Im Ernst, die eingesetzte Sicherheitsrichtlinie ist ein grundlegendes Sicherheitsproblem.

Viele Entwickler führen die Bereitstellung häufig nicht gemäß den offiziellen Bereitstellungsspezifikationen durch. Bitte stellen Sie sicher, dass Ihr WEB-Stammverzeichnis auf das öffentliche Verzeichnis und nicht auf das Anwendungsstammverzeichnis verweist, und ändern Sie den Speicherort der Eintragsdatei nicht nach Belieben . Platzieren Sie keine anderen Anwendungsdateien außer Eintragsdateien und Ressourcendateien im öffentlichen Verzeichnis.

Deaktivieren Sie den Debugging-Modus

Stellen Sie bei der Bereitstellung in einer Produktionsumgebung sicher, dass Sie den Debugging-Modus deaktiviert haben, indem Sie Umgebungsvariablen ändern.

APP_DEBUG=false
Nach dem Login kopieren

Unabhängig davon, ob es sich um die Bereitstellung in einer lokalen Entwicklungs- oder Produktionsumgebung handelt, wird nicht empfohlen, den Debugging-Modus direkt durch Ändern der Konfigurationsdatei zu aktivieren/deaktivieren. Stattdessen sollten Sie Umgebungsvariablen verwenden (die lokale Entwicklung kann definiert werden). .env-Dateien).

Nach dem Ausschalten des Debugging-Modus stützen sich der Gesundheitszustand und die Betriebsüberwachung des Systems hauptsächlich auf Protokolle oder den von Ihnen verwendeten Überwachungsdienst. Daher müssen Sie sich angewöhnen, die Protokolle und den Ausführungsstatus regelmäßig zu überprüfen.

Variablenfilterung anfordern

Vertrauen Sie niemals Benutzereingaben, das ist ein weiser Spruch. Durch größtmögliches Filtern von Anforderungsvariablen können die meisten Schwachstellen und versteckten Gefahren wirksam verhindert werden.

Die vom Framework empfohlene Methode zum Abrufen von Anforderungsvariablen ist die param-Methode der Request-Klasse (verwenden Sie nicht die Methode get oder post, um sie abzurufen, es sei denn, dies ist erforderlich, geschweige denn die nativen Methoden $_GET/$_POST und andere Methoden, um es zu erhalten).

public function index(Request $request)
{
    $name = $request->param('name');
    // 在这里可以根据你的业务需求进行更严谨的过滤
    // 例如 $name = $request->param('name','','htmlentities,strtolower');
    // 或者使用验证器进行专门的验证
}
Nach dem Login kopieren

Für Anforderungsvariablen mit eindeutigen Typen können Sie Typumwandlung verwenden, wenn Sie die param-Methode verwenden, zum Beispiel:

public function index(Request $request)
{
    // 强制转换字符串数据
    $name = $request->param('name/s');
    // 强制转换整型数据
    $name = $request->param('id/d');
    // 强制转换浮点型数据
    $name = $request->param('score/f');
}
Nach dem Login kopieren

oder direkt Methodenparameter verwenden, um die Anforderungsvariable

public function index(string $name)
{
    // 在这里可以根据你的业务需求进行更严谨的过滤
    // 或者使用验证器进行专门的验证
}
Nach dem Login kopieren
< zu erhalten 🎜 >
Wenn Sie alle Daten verarbeiten müssen, können Sie eine globale Filtermethode festlegen. Legen Sie Standardfilter-Filterregeln für verschiedene Anwendungsanforderungen fest (standardmäßig keine Filterregeln). Zu den allgemeinen Sicherheitsfilterfunktionen gehören Stripslashes, HTMLentities, HTMLSpecialchars, Strip_Tags usw. Wählen Sie bitte die am besten geeignete Filtermethode entsprechend dem Geschäftsszenario.

Wenn Sie mehrere Daten abrufen müssen, wird empfohlen, die einzige Methode zur Angabe des abzurufenden Variablennamens zu verwenden, um Berechtigungsprobleme zu vermeiden, die durch die Übermittlung böswilliger Daten verursacht werden.

public function index(Request $request)
{
    // 指定表单数据名称
    $data = $request->only([&#39;name&#39;,&#39;title&#39;]);
}
Nach dem Login kopieren

Wenn Sie Datenbank- oder Modelloperationen zum Schreiben von Daten verwenden, können Sie auch Felder angeben, um zu verhindern, dass illegale und unerwünschte Felder in die Datenbank geschrieben werden.

// 模型
User::allowField([&#39;name&#39;,&#39;title&#39;])
    ->save($data);
// 数据库
Db::name(&#39;user&#39;)
    ->field([&#39;name&#39;,&#39;title&#39;])
    ->insert($data);
Nach dem Login kopieren

Das Modell verfügt außerdem über eine schreibgeschützte Feldfunktion, um zu verhindern, dass Ihre Daten von außen verändert werden.

Upload-Erkennung

Die Upload-Funktion der Website ist auch ein sehr einfacher Einstiegspunkt für Angriffe, daher ist die Sicherheitsüberprüfung der Upload-Funktion besonders wichtig.

Die thinkFile-Klasse des Systems bietet Sicherheitsunterstützung für Datei-Uploads, einschließlich Legalitätsprüfungen für Dateisuffixe, Dateitypen, Dateigrößen und hochgeladene Bilddateien. Stellen Sie sicher, dass Sie diese Legalitätsprüfungen während des Upload-Vorgangs aktiviert haben Weitere Informationen finden Sie im Upload-Kapitel des Handbuchs.

SQL-Injection

Die Abfrage von ThinkPHP nutzt einheitlich den Vorbereitungs-Vorabfrage- und Parameterbindungsmechanismus von PDO, wodurch das Auftreten einer SQL-Injection effektiv vermieden werden kann. Das bedeutet jedoch nicht, dass es absolut sicher ist, wenn Ihnen gute Codierungsstandards fehlen, können Sie dennoch ausgebeutet werden.

Eines der einfachsten Prinzipien besteht darin, Benutzern nicht die Entscheidung über Ihre Abfragebedingungen (oder Feldsortierung) und die Kontrolle über Ihre Abfragedaten zu überlassen.

Für einige String-Abfragebedingungen (einschließlich nativer Abfragen) oder spezielle Abfragen (einschließlich des ORDER-Teils) ist eine manuelle Parameterbindung erforderlich.

// 错误的
Db::query("select * from think_user where id=$id AND status=$statis");
// 正确的
Db::query("select * from think_user where id=? AND status=?", [ $id, $status]);
// 正确的
Db::execute("update think_user set name=:name where status=:status", [
    &#39;name&#39;     => &#39;thinkphp&#39;, 
    &#39;status&#39;   => 1
]);
Nach dem Login kopieren

Für Abfragen mit den Methoden whereExp und whereRaw müssen Sie auch die Parameterbindung verwenden.

Db::name(&#39;user&#39;)
    ->whereRaw(&#39;id > ? AND status = ?&#39;,[10, 1])
    ->select();
Nach dem Login kopieren

Validator verwenden

Für Situationen, in denen eine große Anzahl von Formularen überprüft werden muss, wird empfohlen, die Validatorfunktion zu verwenden, um die Datenkonformität einheitlich zu überprüfen. Der Validierungsvorgang des Validators sollte mit der Validierungsmethode in der Controller- oder Routing-Phase durchgeführt werden. Die Datenvalidierungsfunktion des Modells wurde in der neuen Version abgebrochen und wird nicht mehr empfohlen Modell und Datenbank.

XSS-Angriff

跨站脚本攻击(cross-site scripting,简称 XSS),XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

在渲染输出的页面中,要对一些数据进行安全处理,防止被恶意利用造成XSS攻击,如果是5.1版本的话,所有的输出都已经经过了htmlentities 转义输出,确保安全。如果是5.0版本的话,你可以自定义一个xss过滤函数,在模板文件中对一些关键内容变量进行函数处理。

CSRF

CSRF 跨站请求伪造是 Web 应用中最常见的安全威胁之一,攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。

开启表单令牌验证,尽量开启强制路由并严格规范每个URL请求,定义单独的MISS路由规则。

遵循请求类型的使用规范并做好权限验证,删除操作必须使用DELETE请求,数据更改操作必须使用POST、PUT 或者 PATCH 请求方法,GET请求不应该更改任何数据。

会话劫持

会话劫持是指攻击者利用各种手段来获取目标用户的session id。一旦获取到session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。

有效的防护策略包括:

在每次会话启动的时候,调用regenerate方法。

Session::start();
Session::regenerate(true);
Nach dem Login kopieren

更改session配置参数,开启安全选项:

&#39;use_trans_sid&#39; => 0,
&#39;httponly&#39; => true,
&#39;secure&#39; => true,
Nach dem Login kopieren

升级到安全版本

官方会对一些安全隐患和潜在漏洞进行修复,并且发布一个更为安全的版本。请确认你升级到更安全的版本,确保底层的安全和健壮性。

目前各个版本的建议版本如下:

Sicherheitsüberlegungen für ThinkPHP

业务逻辑安全

这个属于应用层面的安全,很多漏洞源于某个业务逻辑自身的安全隐患,包括没有做合理的数据验证和权限检查,尤其是涉及资金及财务层面的,一定要做更多的安全检查,并且开启事务。一个好的建议是更多的对应用进行分层设计,减少每层的复杂性,独立的分层设计便于提高安全性。

服务器安全

最后一点是运维阶段需要特别注意的,及时更新服务器的安全补丁,确保没有可利用的公开系统漏洞,包括你的数据库系统安(尤其是数据备份工作)。

PHP中文网,有大量免费的ThinkPHP入门教程,欢迎大家学习!

本文转自:https://blog.thinkphp.cn/789333

Das obige ist der detaillierte Inhalt vonSicherheitsüberlegungen für ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So führen Sie das Thinkphp-Projekt aus So führen Sie das Thinkphp-Projekt aus Apr 09, 2024 pm 05:33 PM

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Was ist besser, Laravel oder Thinkphp? Was ist besser, Laravel oder Thinkphp? Apr 09, 2024 pm 03:18 PM

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP möglicherweise besser geeignet.

Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Nov 22, 2023 pm 12:01 PM

„Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben“ Mit der rasanten Entwicklung der Internettechnologie stellen Webanwendungen immer höhere Anforderungen an die Verarbeitung einer großen Anzahl gleichzeitiger Anforderungen und komplexer Geschäftslogik. Um die Systemleistung und das Benutzererlebnis zu verbessern, erwägen Entwickler häufig die Verwendung asynchroner Aufgaben, um einige zeitaufwändige Vorgänge auszuführen, z. B. das Senden von E-Mails, das Verarbeiten von Datei-Uploads, das Erstellen von Berichten usw. Im Bereich PHP bietet das ThinkPHP-Framework als beliebtes Entwicklungsframework einige praktische Möglichkeiten zur Implementierung asynchroner Aufgaben.

So installieren Sie thinkphp So installieren Sie thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP-Installationsschritte: Bereiten Sie PHP-, Composer- und MySQL-Umgebungen vor. Erstellen Sie Projekte mit Composer. Installieren Sie das ThinkPHP-Framework und die Abhängigkeiten. Datenbankverbindung konfigurieren. Anwendungscode generieren. Starten Sie die Anwendung und besuchen Sie http://localhost:8000.

Wie ist die Leistung von thinkphp? Wie ist die Leistung von thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ist ein leistungsstarkes PHP-Framework mit Vorteilen wie Caching-Mechanismus, Codeoptimierung, Parallelverarbeitung und Datenbankoptimierung. Offizielle Leistungstests zeigen, dass es mehr als 10.000 Anfragen pro Sekunde verarbeiten kann und in großen Websites und Unternehmenssystemen wie JD.com und Ctrip in praktischen Anwendungen weit verbreitet ist.

RPC-Dienst basierend auf ThinkPHP6 und Swoole zur Implementierung der Dateiübertragungsfunktion RPC-Dienst basierend auf ThinkPHP6 und Swoole zur Implementierung der Dateiübertragungsfunktion Oct 12, 2023 pm 12:06 PM

Der auf ThinkPHP6 und Swoole basierende RPC-Dienst implementiert die Dateiübertragungsfunktion. Einführung: Mit der Entwicklung des Internets ist die Dateiübertragung in unserer täglichen Arbeit immer wichtiger geworden. Um die Effizienz und Sicherheit der Dateiübertragung zu verbessern, wird in diesem Artikel die spezifische Implementierungsmethode der Dateiübertragungsfunktion basierend auf RPC-Diensten basierend auf ThinkPHP6 und Swoole vorgestellt. Wir werden ThinkPHP6 als Web-Framework verwenden und die RPC-Funktion von Swoole nutzen, um eine serverübergreifende Dateiübertragung zu erreichen. 1. Umweltstandard

See all articles