Jump to content

Keamanan untuk pengembang

From mediawiki.org
This page is a translated version of the page Security for developers and the translation is 37% complete.
Penyajian oleh Chris Steipp, seorang Rekayasawan Keamanan Yayasan Wikimedia, dari WMF Tech Days 2012

Sebagai pengembang MediaWiki, Anda punya tanggung jawab untuk menulis kode yang aman dengan gaya yang mudah ditinjau dan diaudit. Artikel ini berfokus pada persoalan terkait keamanan dan praktik terbaik yang digunakan oleh pengembang MediaWiki untuk mengatasi masalah keamanan tersebut. Untuk masalah gaya penulisan kode, silakan baca konvensi penulisan kode MediaWiki.

Setiap pengembang MediaWiki harus membaca artikel ini dengan saksama, terlepas dari tingkat pengalaman mereka dalam pengembangan aplikasi web dan dengan PHP, dan secara berkala membiasakan diri kembali dengan isinya. Selain itu, setiap pengembang harus membaca dengan saksama artikel tentang Cross-site scripting (XSS), Cross-site request forgery (CSRF), dan Penyuntikan SQL , yang masing-masing memberikan penjelasan lebih rinci tentang masing-masing jenis kerentanan umum ini. security checklist for developers menyediakan acuan berguna untuk tugas-tugas pengembangan umum.

Mengapa keamanan itu penting

Keamanan aplikasi web merupakan persoalan kritis di dunia yang terhubung secara digital. Situs web dengan kerentanan keamanan merupakan bagian penting dari prasarana global ilegal berupa malwer (malware), spam, dan pengelabuan. Penggembala bot (bot herder) merangkak web untuk mencari situs web dengan kerentanan keamanan, dan kemudian menggunakan kerentanan tersebut untuk membajaknya. Situs web yang dibajak akan menyebarkan malwer (virus) kepada pengunjung, baik melalui kerentanan peramban atau secara terang-terangan melalui rekayasa sosial. Malwer yang diunduh mengubah komputer kelayan menjadi "zombi", yang merupakan bagian dari jaringan kejahatan terorganisir global yang bertujuan untuk mencuri rincian rekening bank, mengirim spam, dan memeras uang dari situs web dengan serangan penolakan layanan (denial-of-service).

Keamanan yang terperagakan

Tidak cukup hanya meyakinkan diri sendiri bahwa Anda sempurna dan kode Anda tidak mempunyai kerentanan keamanan. Setiap orang pasti pernah membuat kesalahan. Semua kode inti MediaWiki, dan sebagian besar kode pengaya MediaWiki, ditinjau oleh pengembang berpengalaman untuk memverifikasi keamanannya. Ini adalah praktik yang baik dan harus didorong.

Write code in such a way that it is demonstrably secure, such that a reviewer can more easily tell that it's secure. Jangan menulis kode yang terlihat mencurigakan tetapi, setelah diperiksa dengan cermat, ternyata aman. Kode demikian menyebabkan kegelisahan yang tidak perlu bagi peninjau.

Ikhtisar kerentanan dan serangan keamanan

Dokumen ini sangat berfokus pada serangan dan risiko keamanan berikut. Setiap pengembang MediaWiki harus memahami masalah-masalah ini dan setidaknya ada pemahaman dasar tentangnya.

Skripting lintas situs (XSS)

For detailed information on avoiding XSS vulnerabilities in MediaWiki, read the Cross-site scripting article. 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 Cross-site request forgery 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.

serialize() / unserialize()

unserialize() 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 FormatJson::encode() and FormatJson::decode() instead of PHP's native serialisation.

Historical

See also

Subpages