Kendi başıma PHP öğrenme yaşıyorum ve ben strip_tags () fonksiyonu haberdar oldum.

5 Cevap php

I'm new to PHP and I'm following a tutorial here: Link

Bu doğru, bir kullanıcı girişi php kod yazmak ve temelde sitenizi vida ki oldukça korkutucu?

Peki, şimdi ben biraz paranoyak olduğumu ve bana bazı alışkanlıkları var onları bir kez tıkmak için deneyin daha doğrusu sağa kapalı yarasa iyi güvenlik uygulamalarını öğrenmek istiyorum.

Ben PHP için yeni bir marka olduğum için (kelimenin tam anlamıyla iki gün önce aldım), ben bocalama olmadan kolayca oldukça çok şey öğrenebilirsiniz.

Ne başka bir şekilde benim sitede maskaralık önleyebilir? : D

5 Cevap

strip_tags() onlardan sadece biri ile yardımcı olan bir PHP uygulama geliştirme akılda tutulması gereken birkaç şey vardır. Aslında strip_tags(), etkili iken, hatta gerekirse daha fazla yapmak olabilir: htmlspecialchars(), hatta duruma göre, preferrable olmalı ile muhtemelen tehlikeli karakterleri dönüştürme.

Generally it all comes down to two simple rules: filter all input, escape all output. Şimdi tam olarak giriş ve çıkış teşkil anlamak gerekir.

Çıktı, kolay uygulama tarayıcınıza gönderir her şey çıktı, bu yüzden çıkış verileri her zaman kendiniz yazmak değil htmlspecialchars() ya da başka herhangi bir kaçış işlevi kullanın.

Giriş PHP kodu kodlanmış olmayan herhangi bir veridir: şeyler kurabiye, GET yoluyla bir sorgu dizesinden, POST aracılığıyla bir formdan gelen, must sizin ihtiyaçlarınıza bağlı olarak en uygun şekilde filtre edilebilir tüm bu. Bir veritabanından gelen Hatta veri tehlikeli kabul edilmelidir; veritabanı çok app etkileyebilecek bir şekilde başka tatlıya eğer özellikle paylaşılan bir sunucuda asla bilemezsiniz.

Beyaz listeler böylece expcted giriş biçimine dayalı ve sadece seçilen değerler, doğrulama izin: verileri filtrelemek için farklı yolları vardır. Ben tavsiye asla bir şey, kullanıcıların almak verileri tespit deneyin: onları size beklediğiniz olsun yoksa, bunun yerine temizlemek için çalışmakla talebini reddetmek, sizin kurallarınıza göre oynamak var.

Özel dikkat, bir veritabanı ile uğraşmak durumunda, SQL enjeksiyonu ödenmelidir: saldırganın zararlı bir yönergeyi yürütmeye çalışırken onları sahte böylece saldırı bu tür, düzgün veritabanına göndermek sorgu dizeleri inşa değil dayanır. Her zaman böyle the mysqli extension veya kullanılarak hazırlanmış ifadeler kullanmak, mysql_real_escape_string() ya da daha iyi gibi kaçan bir işlevini kullanmanız gerekir PDO.

Orada bu konu hakkında söylemek için daha fazla bulunuyor, ancak bu noktaları başlamak gerekir.

HTH

EDIT: Demek iyi ne karar "filtreleme girişi" ile, açıklamak ve kötü ne, herhangi bir şekilde girdi verileri değiştirmek değil. Dediğim gibi tarayıcıya çıkış olmadığı sürece ben kullanıcı verileri değiştirmek asla.

strip_tags gerçekten kullanmak için iyi bir şey değil, bu her durumda korumak değildir.

HTML Purify: http://htmlpurifier.org/

Ancak kendisi hala tüm kullanım durumları için hitap etmeyecek gelen verileri işlemek için gerçekten iyi bir seçenektir - ama kesinlikle iyi bir başlangıç ​​noktası.

Ben tutorial Bahsettiğiniz güvenliği hakkında biraz yanıltıcı olduğunu söylemek zorundayım:

It is important to note that you never want to directly work with the $_GET & $_POST values. Always send their value to a local variable, & work with it there. There are several security implications involved with the values when you directly access (or output) $_GET & $_POST.

Bu saçmalıktır. Yerel bir değişkene bir değer kopyalama doğrudan $ _GET veya $ _POST değişkenler kullanarak daha fazla güvenlidir.

Aslında, herhangi bir veri hakkında doğal olarak güvensiz bir şey yok. Nedir önemli olan what you do with it. Eğer ; rm -rf / içeren $ _POST değişkeni olabilir neden mükemmel meşru nedenleri vardır. Bu bir HTML sayfası çıktısı ya da örneğin, bir veritabanında depolamak için gayet iyi.

Eğer system veya exec gibi bir komut kullanarak olduğunuzda güvensiz tek zamandır. Ve bu kullandığınız hangi değişkenler hakkında endişelenmenize gerek zamanı. Bu durumda, muhtemelen bir beyaz liste gibi bir şey kullanmak isterdim, ya da en azından escapeshellarg aracılığıyla değerlerini çalıştırın.

Benzer böylece, veritabanlarına sorgular göndererek tarayıcılar HTML gönderme ile. Eğer hedef için uygun kaçan yöntemi kullanarak, başka bir yere göndermeden önce veri hakkını kaçış.

strip_tags html her parça kaldırır. daha sofistike çözümler (yani, özel html etiketlerini izin) izin verilenler listesine dayanmaktadır. İyi bir beyaz liste kütüphane htmlpurifyer olan http://htmlpurifier.org/

ve şeylerin veritabanı tarafında tabii mysql_real_escape_string veya pg_escape_string gibi fonksiyonlarını kullanın

Eh, belki ben yanılıyorumdur, ama ... tüm edebiyat, ben okudum, insanlar bu htmlspellchars kullanmak çok daha iyi olduğunu söylüyorlar.

Ayrıca, giriş verileri döküm oldukça gerekli. (Eminseniz örneğin int için, kullanıcı kimliği var).

Eh, önceden, veritabanı kullanmaya başlayacağız - (Bazı eski kitaplarda hala mysql_escape_string yazıldığı) SQL enjeksiyonu önlemek için kullanım mysql_real_escape_string yerine mysql_escape_string.