Soru - Cevap Bölümü
/ Kategori: Programlama
Merhaba,
Şöyle bir sorunum var:
Bir Mysql veritabanından PHP aracılığı ile, Flash uygulamasına PHP tarafından oluşturulmuş XML verisi çekiyorum.
Yapı şu şekilde: Flash uygulaması, veri.php dosyasını çağırır. veri.php dosyası çağrıldığında mysql’e bağlanır. Kayıtlı verileri xml formuna dönüştürür ve Echo yöntemi ile Xml formunu flash’a aktarır.
Veritabanı oldukça büyük. XML’den vazgeçip doğrudan mysql sorgularını da Flash uygulamasına alabilirim ama, bunu çeşitli nedenlerden dolayı yapamıyoruz. Bu yöntemle almamız şart.
veri.php dosyasına doğrudan erişimi engellemeliyim. Yani, herhangi bir kullanıcı tarayıcının adres satırından dosyanın tam yolunu yazarak veri.php dosyasına ulaşamamalı. Şu haliyle bu dosyaya ulaşılabiliyor. Ulaşıldığında ise veritabanının xml çıktısı görüntüleniyor (veri.php dosyası veritabaındaki tüm veriyi echo’luyor).
örneğin:
http//site.com —-> veri.php dosyasına erişim açık.(Flash uygulaması veri.php’nin xml echo’suna erişebilir)
http//site.com/data/veri.php—-> erişim reddedildi.(veri.php dosyasına erişilemez)
.htaccess ile bunu yapamadım. Hangi kuralı koyarsam koyayım, Flash uygulamasını da engelleyen bir durum oluşuyor.
Ne yapmalıyım?
Cevaplar
( Faydalı Cevapları Göster )
Teşekkürler;
Ancak öneriniz sorunumu çözmedi. Sunucu erişimim ssh vasıtasıyla. root login olabiliyorum ve CHMOD haklarını her düzeyde verebiliyorum.
Hiç bir CHMOD seviyesinde veri.php’nin xml çıktısının görüntlenmesini engelleyemedim.
Tekrar özetleyeyim. .htaccess ile klasöre erişimi sınırladığımda, evet, veri.php’ye erişim engelleniyor ama Flash dosyası da engelleniyor.
Flash uygulaması Default.php içerisinde gömülü.
Siteye girildiğinde, Flash uygulaması, aynı dizinde bulunan "definitions.php" den bveri.php dosyasının yolunu öğreniyor. Definitons.php sadece kimi dosya yollarını içeriyor. Başka bir özelliği yok.
Şöyle:
<?php
$xmlgate="data_sources/data.php";
echo "&gate=$xmlgate";
?>
Sonra, flash uygulaması, definitons.php dosyasından aldığı dosya yolunu kullanarak veritabanından kayıtları alan veri.php dosyasını çağırıyor
Şöyle:
var get_stm_data:LoadVars = new LoadVars();
get_stm_data.load("definitions.php");
get_stm_data.onLoad = function(baseFileLoaded) {
if (baseFileLoaded)
base=get_stm_data.gate
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.load(base);
xmlData.onLoad = (loadXML);
};
veri.php dosyası, definitions.php dosyasındada görüleceği üzere, bir alt dizinde. yapısı ise özetle şöyle:
<?php
header("Content-Type: text/xml; charset=utf-8");
?>
<?php
$dbServer='localhost';
// username and password to log onto db server
$dbUser='root';
$dbPass='passwd';
$db='database';
$link = mysql_connect("$dbServer", "$dbUser", "$dbPass")or die("i cant connect");
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");
mysql_select_db("$db")or die("Could not select database");
$query = mysql_query("SELECT * FROM products");
$rowResults = mysql_num_rows($query);
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<products>\n";
for($i=0;$i<$rowResults;$i++){
$productImage = mysql_result($query,$i,"product_image");
$productName = mysql_result($query,$i,"product_name");
$productCategory = mysql_result($query,$i,"product_category");
echo "<product>\n";
echo "<image>" . $productImage. "</image>\n";
echo "<caption>" . $productName . "</caption>\n";
echo "<productcategory>" . $productCategory . "</productcategory>\n";
echo "</product>\n";
}
echo "</products>\n";
mysql_close($link);
?>
Sorunum, veri.php dosyasına doğrudan erişimi engellediğimde, flash dosyasının da bu engele takılması.
.htaccess ile bir çözüm bulamayacağım açık. Flash player istemci taraflı. .htaccess ile hangi prosedürü tanımlarsam tanımlayayım, flash player de bu prosedürün bir parçasına dönüşüyor.
User Agent – referer header’ları da bu proje için yeterince güvenli değil.
Bir kaç satır kodla HTTP bilgilerini manüple edip benim onay verdiğim agent’a ya da referer’e terfi edebilirler.
Üstelik, Flash player bu durumdan da olumsuz etkilenebilir.
Şu halde PHP dosyasının XML çıktısı üretme biçimini değiştirmek en akla yatkını.
Bunu da denedim. Encode ettim, Xml çıktıyı xslt ile manüple ettim. Ama ne yaparsam yapayım, Saf XML çıktısına bir biçimde erişebildim.
Erişememeliyim.
Şu anda gelebildiğim nokta, "Content-type xxx/xxx" yöntemi ile php dosyasının XML çıktısını okunamaz hale getirmek.
Erişim hala var ama en azından XML çıktı okunamıyor. Tabi hiç okunamıyor değil, biraz uğraşınca okudum. Demek ki elin oğlu-kızı da okuyabilir.
Bakayım. Stabil ve tekniğine uygun bir çözüm bulursam paylaşacağım.
Yoksa XML prosesini projeden sepetleyeceğim. Sadece mysql, php, flash kalacak.
Ya da toptan projeyi sepetleyeceğim. Sadece ben kalacağım.
safa bey, ne diyeyim :) çıkmaz sokakta kalmış gibisiniz. yapılabilecek herşeyide yapmışsınız. eğer bir çözümünü bulursanız burayada yazın lütfen.
ancak her halükarda maalesef ulaşım olacaktır :|
Genelde multiplayer oyunlarda bu tip sorularla karsilasiyoruz Safa yapmak istedigin islemi yapamazsin htaccess ya da baska bir yontemle.
Oncelikle AMFPHP kullanalim, remoting yapalim boylelikle bir parca daha kapali bir sistem elde ederiz.
Bazi durumlarda SWF nin icine application key koyariz. Bu key ile ornegin remoting’de server tarafiyla konusuruz, bu key de arada bir degisir ve belki shared object icine yazilabilir. Her requestte bu key server’a iletilir. Yani bir nevi session id gibi bir sistem ama sadece veri.php nin sahibinin ve server’inin bilecegi bir key bu.
Client tarafina gonderilen hemen hic bir bilginin guvenlik garantisi olmuyor. Sadece cesitli katmanlar koyabiliriz. Iste key, session_id, swf obfuscate, SWF Shared Object’e gomulen bilgiler,… Hepsi cozumlenebilir client tarafindan eger ugrasilirsa.
İlginize teşekkür ederim. Veriyi php’de encrypt eden, Flash’ta ise decrypt eden (ya da tersi) bir yöntem üzerinde yoğunlaşmaya karar verdim. Tabi diğer katmanları da kullanacağım.
Eğer sonuç iyi çıkarsa, tüm kainata yansıtırım.
Eğer sonuç yamalı bohça olursa, utanırım, yansıtamam:)
Tekrar teşekkürler.
Not: Forumları filan tararken, hani damdan düşmüş bir başkası var mıdır diye; kendi mesajımla karşılaştım talihin garip bir cilvesi işte..
Meğer ben 2 yıl önce de bu mevzuya takmışım. üstelik, oradaki mesajımda Ben Forta ile ColdFusion’a da amma kızmışım. Niye paralı diye.. İnsan bir arpa boyu olsun yol alır be.
Link şurada:adobeturk-flashta-veritabanı-işlemleri
Muhtemelen encript / decrypt’i ve remoting ‘i yöntem olarak hesaba katmışsındır diye ses etmemiştim. Bak şöyle bir link var yardımcı olur belki:
Sending variables from flash to PHP and back.
Bir de şu kitap oldukça güncel, sonrası için faydalı olabilir:
Flash and PHP Bible – Matthew Keefe
Coldfusion konusuna gelince, bu işler CF ile o kadar kolay ki, coldfusion component’larını (CFC) flash içerisinde sanki bir actionscript nesnesi gibi çağırabiliyorsun mesela…
Bence geç kalmış sayılmazsın… ;)
@Zehra Doruk
Linkler için teşekkürler.
enc/decr olayından kaçalım dedik:)
Veritabanından elde ettiğimiz XML ormanı orman değil, tam bir cangıl. Veritabanını tasarlayan insanlar(lar) belki de artık yaşamıyorlar. Gelen bir tablo açmış, giden bir kategori eklemiş. İlişkisel veritabanı kavramı bu olayda bariz bir biçimde "çelişkisel veritabanı" na dönmüş.
Hazır bir enc/decr kütüphanesiyle küçük bir test yaptık, cangılda kaybolduk. White space sorunları, hex/binary uyumsuzlukları baş gösterdi. Flash decr edilmiş veriyi gereği gibi işleyemedi. Tabi, küçük bir testti. Uğraşıp sorunsuz bir hale getirmek ve bu yöntemi benimsemek en doğrusu olacak.
Bakalım.
Bir -iki gündür ateşlendim çünkü termin var. Ve biz henüz "<?" bile demedik.
CF platformu şu aşamada zor. Ajansın 2 sunucusu var. biri Unix diğeri Windows. Windows fiziki barınıyor ve burada. Unix ise sanal.
Fiziki olan, ASP’ci müşterilerimize tahsis edildi. Var böyle müşteriler. Koskoca genel müdür ASP olsun deyince, bize susmak düşüyor. "Sen paradan bahset, ASP de yaparız DSP de" diyoruz.
Buraya CF kuramayız, hem maliyetli, hem de talep yok. Talebi yaratalım, eyvallah ama PHP’ye bile "forum scripti" gözüyle bakan IT müdürleri ile muhatabız. Maaşallah Ülkemizdeki IT’cilerin needeyse tamamı birer Microsoft havarisi. Piyasa, ne yapalım..
Dışardaki sanal olan ise, küçük müşterilerimize dönük. 5-10 sayfadan ibaret, dinamik içeriği minimum seviyelerde olan "hakkımızda" siteleri yani.
Oraya CF kurulabilir. sanal pakette böyle bir opsiyon var ama etkin değil. Dur bakalım, kuracağız bu gidişle.
Sizlere tekrar teşekkür ederim, başladığımız yerdeyiz ama, kendi payıma ufuk açıcı bir süreç oldu.
Etkinlikler
Toplantı
Kahraman ve need4code.com Projesi Connect Toplantısı
Kahraman ve need4code.com Projesi Connect Toplantısı
Selam arkadaslar,
Programlama ile uğraşanların hayatlarını kolaylaştıracak desktop ve web tabanlı ortak iki proje ile ilgili 3. toplantımızı 3Aralık...
Kategori:
Toplantı
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 368 (1 kayıtlı, 367 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız








veri.php dosyasının permission’unu 664’e ayarlayın. böylelikle veri.php’yi ancak php okuyabilir.
eğer flash içinden erişim olmazsa, 744’e ayarlamayı da deneyebilirsiniz.