Security for developers/cs



Jako vývojář MediaWiki máte odpovědnost za psaní zabezpečeného kódu ve stylu, který lze snadno kontrolovat a auditovat. Tento článek se zaměřuje na problémy související se zabezpečením a na osvědčené postupy používané vývojáři MediaWiki k řešení těchto bezpečnostních problémů. Pro problémy se stylem kódování si prosím přečtěte kódovací konvence MediaWiki.

Každý vývojář MediaWiki by si měl pozorně přečíst tento článek, bez ohledu na úroveň svých zkušeností s vývojem webových aplikací PHP, a pravidelně se s tímto materiálem seznamovat. Kromě toho by si každý vývojář měl pozorně přečíst články o Cross-site scripting (XSS) (skriptování napříč weby), Cross-site request forgery (CSRF) (falšování požadavků napříč weby) a, z nichž každý poskytuje podrobnější vysvětlení každého těchto běžných typů zranitelnosti. poskytuje užitečný odkaz pro běžné vývojové úkoly.



Proč záleží na bezpečnosti
Zabezpečení webových aplikací je v kabelovém světě kritickým problémem. Webové stránky s chybami zabezpečení jsou klíčovou součástí nezákonné globální infrastruktury malwaru, spamu a phishingu. Pastevci botů procházejí web, hledají webové stránky s bezpečnostními chybami a poté je využívají k jejich zneužití. Unesená webová stránka bude návštěvníkům distribuovat malware (viry), a to buď prostřednictvím zranitelností prohlížeče, nebo otevřeně prostřednictvím sociálního inženýrství. Stažený malware promění počítač klienta v "zombie", který je součástí celosvětové sítě organizovaného zločinu zaměřeného na krádeže údajů o bankovních účtech, rozesílání spamu a vymáhání peněz z webových stránek s hrozbami odmítnutí služby.



Prokazatelné zabezpečení
Nestačí se ujistit, že jste perfektní a že váš kód nemá žádné bezpečnostní chyby. Každý dělá chyby. Veškerý základní kód MediaWiki a velká část kódu rozšíření MediaWiki je kontrolován zkušenými vývojáři, aby ověřili jeho bezpečnost. To je dobrá praxe a měla by být podporována.

Pište kód tak, aby byl prokazatelně bezpečný, takže recenzent může snadněji poznat, že je bezpečný. Nepište kód, který vypadá podezřele, ale po pečlivém prozkoumání je bezpečný. Takový kód způsobuje zbytečnou úzkost recenzentů.



Přehled bezpečnostních zranitelností a útoků
Tento dokument se silně zaměřuje na následující útoky a bezpečnostní rizika. Každý vývojář MediaWiki by měl být s těmito problémy obeznámen a měl by jim alespoň částečně rozumět.



Skriptování mezi stránkami (XSS)
Podrobné informace o tom, jak se vyhnout zranitelnostem XSS v MediaWiki, najdete v článku Skriptování napříč weby. Cross-site scripting (XSS) vulnerabilities allow an attacker to inject malicious code into a website. XSS vulnerabilities are caused by a web application not properly escaping data from external sources (such as GET data, POST data, RSS feeds or URLs). The range of attacks that can be made via XSS are very diverse, ranging from harmless pranks to the hijacking of an authenticated user's account.

Primary defenses: To avoid XSS attacks, the basic principles are:
 * Validate your input
 * Escape your output

You can skip validation, but you can never skip escaping. Escape everything. Escape as close to the output as possible, so that the reviewer can easily verify that it was done.

Note that output encoding (escaping) is context sensitive. So be aware of the intended output context and encode appropriately (e.g. HTML entity, URL, JavaScript, etc.)

The OWASP Abridged XSS Prevention Cheat Sheet is a useful and up to date quick reference guide for mitigating XSS issues.

If you are writing JavaScript, please ensure that you understand DOM-based XSS, and how to prevent it in your code.

Cross-site request forgery (CSRF)
For detailed information on avoiding CSRF vulnerabilities in MediaWiki, read the article. Cross-site request forgery (CSRF or XSRF) attacks use authentication credentials cached in a victim's browser (such as a cookie or cached username and password) to authorise malicious HTTP requests. The malicious HTTP request can be sent in many ways. As long as the requests are processed by a web browser that has cached authentication credentials, a CSRF attack can be attempted.

Primary defenses: Our primary defense mechanism against CSRF attacks is to add edit tokens to HTML forms.

SQL injection
For detailed information on avoiding SQL injection, read the SQL injection article.

SQL injection relies on poorly validated input being used in a database query, possibly allowing an attacker to run arbitrary SQL queries on your server. The attacker may then be able to fetch private data, destroy data or cause other unintended responses. In the worst case, the injected code could allow the attacker to gain full control of the system by exploiting multiple vulnerabilities in the database server, system utilities and operating system.

Primary defenses: The primary defense against SQL injection is to use MediaWiki's built-in database functions. Avoid using direct SQL queries at all costs.

/
can lead to arbitrary code execution. To prevent this MediaWiki developers should always use json instead of php serialisation in new code.

Primary defenses: Use and  instead of PHP's native serialisation.

Historical

 * register_globals, has not been an issue since +.

Subpages

 * Security for developers/Architecture
 * Security for developers/Tutorial