DB günlüğü benim PHP web uygulaması için dosya günlüğü daha güvenli midir?

5 Cevap php

Benim web uygulaması içinde bir günlüğüne hata / bilgilendirme ve uyarı mesajları oturum istiyorum. Ben başlangıçta bir metin dosyasının üzerine tüm bu günlüğü düşünüyordum.

Ancak, benim PHP web uygulaması günlük dosyalarına yazma erişimini ve bu günlük dosyası da günlük dosyası döndürme benim web uygulaması şu anda yok olan istenirse yazma erişimi gerekebilir klasör konut ihtiyacı olacak. Benim web uygulaması zaten tüm veri depolama ihtiyaçları için MySQL veritabanı kullanan beri bana MySQL veritabanı günlük iletileri için bir alternatif.

Ancak, bu zaten dosya sistemi izinlerini kullanarak korunan veritabanı erişim bilgileri ile bir yapılandırma dosyası beri MySQL seçeneği ile devam file seçeneği çok daha iyi olduğunu düşünmeye başladım. Ben şimdi günlük dosyası seçeneği ile giderseniz ben dosyayı onarmak ve erişim izinlerini klasör gerekir ve bu sadece benim uygulama daha az güvenli hale ve günlüğü bütün amacı yendi olacaktır.

Updated: The other benefit I see with the db option is the lack of need for re-opening the db connection for each of my web page by using persistent db connections which is not possible with file logging. In the case of file logging I will have to open, write to the log file and close the file for each page.

Bu doğru mudur? Ben geliştirme için XAMPP kullanarak ve lamba için bir newbie duyuyorum. Bana günlüğü için öneriler bildirin. Teşekkürler.

Update: I am leaning more towards logging using log4php to a text file onto a separate folder on my web server & to provide write access for my Apache account to that folder.

5 Cevap

DB erişilebilir değilse ne olur, nerede bu günlük olacak?

Log dosyaları genellikle metin dosyaları yazılır. Bir iyi bir nedeni kez düzgün yapılandırılmış, bu yöntem (her zaman disk alanı veya izinleri tükendi olsa ... size değiştirebilirsiniz) başarısız neredeyse hiç olmasıdır.

Kolay ve güçlü günlüğü sağlamak zaten orada iyi günlük çerçeveler vardır. Ben (belki başkası yorum yapabilirsiniz) PHP için özel olarak mevcut ne çok aşina değilim, ama log4j çok yaygın olarak Java dünyasında kullanılmaktadır.

Bir dosya açılıyor güvenlik tehlikesi olabilir. Örneğin dikkate bir LFI Exploit alır. Bir saldırganın log dosyaları etkilemek ve <?php eval($_GET[e]);?> sonra bir SLP saldırı kullanarak bu php kod yürütebilir gibi php kod ekleyebilirsiniz. İşte bir örnek:

Hassas kodu:

include("/var/www/includes/".$_GET['file']);

Ne böyle bu sayfayı eriştiyseniz:

http://localhost/lfi_vuln.php?file=../logs/file.log&e=phpinfo();

Mümkün olduğunda genel olarak ben veritabanına bu hata bilgilerini saklamak istiyorsunuz. Ancak htmlspecialchars() çözecek olan, <> gerek yok bu saldırıyı koparmak için. Hatta SLP saldırılarına karşı kendini korumak, sen belki yazmadın kodu gibi kullandığınız bir kütüphane gibi, savunmasız, bir "Savunma derinlemesine bir yaklaşım" olmalıdır.

(PS XAMPP güvenlik açısından, orada bir otomatik güncelleme değildir ve proje bakıcılarına çok ciddi güvenlik açıklarına yönelik düzeltmeler serbest bırakmak için çok yavaş gerçekten kötü.)

Yanı sıra doğru izinleri sağlanması gibi, bu web kök outsite log dosyaları saklamak için iyi bir fikirdir - yani web kök /accounts/iama/public_html, /accounts/iama/logs günlükleri saklamak ise

Günlük dosyaları, benim deneyim, her zaman en iyi düz metin biçiminde depolanır. Onlar her zaman (yani SSH üzerinden ya da yerel bir terminal üzerinde) herhangi bir durumda okunabilir ve yakın-on-her zaman mevcuttur bu şekilde yazılacak.

İkinci konu güvenlik - bir Linux sistemi altında dosya izinlerini ayarlamak kadar okuyun ve dizini ona yazmak için PHP için minimum izinlerini vermek ve her kim okuma erişim ihtiyacı onu alır. Hatta dosya sistemi düzeyinde şifreleme oluyor olabilir.

Eğer tüm dışarı gitmek olsaydı, günlük dosyaları SSL üzerinden başka bir yere gönderilen bir şifreli kopya ile günlük temizlenmiş olabilir, ama ben bu overkill ;) olabilir hissediyorum

Eğer sormamda sakınca yoksa, ne güvenlik açısından bu log dosyaları bu kadar kritik yapan?

Farklı birkaç soru soruyorsun gibi görünüyor:

Which is more secure?:

DB Günlüğü bir dosyaya ve tersi oturum daha fazla güvenli değildir.

Bu kadar app yazma günlük dosyasını ekleyerek herhangi bir şekilde güvenliği tehlikeye değil, bir şey yapmak ama sunucu çalıştırmak ve günlük dosyalarına yazma iznine sahip olmayan bir kullanıcı kullanarak PHP sunucu / web sunucusu çalışıyor olmalıdır. Daha fazla bilgi için http://www.linux.com/archive/feature/113744 bakabilirsiniz.

Which is better?:

Tek, doğru cevabı sizin günlükleri ile ne yapmak istediğinize bağlıdır vardır.

Ne log dosyaları ile yapmak istiyorsun? Eğer başka bir uygulama içine boru onları istiyor musunuz? Eğer öyleyse, bir DB koyarak gitmek için yol olabilir. Bunları arşivlemek istiyor musunuz? Peki, bir dosyanın içine atmak için daha iyi olabilir.

Notes:

Eğer Log4PHP gibi bir günlük bir çerçeve kullanıyorsanız, http://logging.apache.org/log4php/index.html Bir DB ve kolay bir günlük dosyası (bu muhtemelen yapmanız gereken bir şey değildir, ama bir durum olabilir) ya da geçiş yapabilirsiniz hem de oturum açabilirsiniz çok uğraşmadan iki depolama sistemleri arasında.

Edit: Bu konu http://stackoverflow.com/questions/183783/log-to-file-via-php-or-log-to-mysql-database-which-is-quicker bir çift olabilir