2013-04-06 24 views
8

Sitemde Stack   Taşma URL'leri gibi URL'ler oluşturdum. URL'lerim aşağıdaki gibidir. Bu URL Yığın Taşması URL'leri nasıl çalışır?

http://www.example.com/1255544/this-is-the-url-text 

, 1255544 id ve this-is-the-url-text URL başlık metni, hem veritabanında saklanır olduğunu. Stack   Taşma URL'lerinin id tabanının üzerinde çalıştığını fark ettim. Burada varsayalım bir yığın   Taşma URL

http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks 
bu URL'de

, 15679171 olan yazının kimliğidir. Ben new-way-to-prevent-xss-attacks dokunmadan 15706581 bu kimliği değişti ve URL otomatik olarak aşağıdaki URL'ye değişti, Enter Basıldığında:

http://stackoverflow.com/questions/15706581/simplecursoradapter-does-not-load- 
external-sqlite-database-id-error 

Ve

altında gibi URL başlık metninin bir parçası bazılarını kaldırmak çalıştığımızda

http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks 

veri veritabanından alınan ediliyor anlamı:

http://stackoverflow.com/questions/15679171/new-way-to-preve 

otomatik olarak aşağıdaki adresi düzeltir 15679171 numaralı kimlik ve new-way-to-prevent-xss-attacks numaralı URL başlığı metnine göre kimliğe göre eklenmiştir.

Ayrıca bunu yapmak istiyorum. Ama sorun şu ki, birisi URL'nin kimliğini değiştirirse başlık metninin otomatik olarak değiştirileceğini anlamayacağım. Bunu nasıl yaparım? Bu eylemi gerçekleştirme veya uygun ve verimli bir şekilde

$url_id = $_GET["id"]; 
$url_txt = $_GET["url_txt"]; 

$qry = "SELECT * FROM mytable WHERE url_id = '{$url_id}' LIMIT 1"; 
$data = mysql_query($qry); 
$data_set = mysql_fetch_array($data); 

if($url_txt== $data_set["url_txt"]) { 
    // proceed further 
} else { 
    $rebuilt_url = "http://www.example.com/" . $url_id . "/" . $data_set["url_txt"]; 
    header("Location: {$rebuilt_url}") // Redirect to this URL 
} 

mi:

Aşağıdaki düşündünüz mü? Bir çözüm var mı? Eğer Apache kullanırsanız

+1

, adres çubuğundan url ile karşılaştırmak ve daha sonra doğru URL'ye yönlendirin. –

+0

Ayrıca, sql enjeksiyonuna dikkat edin (bir hile yapması gereken $ url_id değerini). –

+0

Merhaba. Son zamanlarda "Stackoverflow Soruları Sistem İşleri Nasıl Cevaplıyor" adlı bir soru gönderdiniz ve bir moderatör tarafından yanlışlıkla farklı bir siteye taşındı. Oops, onlar için smack ':)'. Bunu repost etmenizi öneririm (kopyala ve yapıştır'ı kullanın!) Fakat buna "StackOverflow benzeri sistemimi nasıl optimize edebilirim" diye adlandırın. Bununla birlikte, yorumlarda bazı genel ifadeler alabilseniz de, çok açıklayıcı bir şekilde kapalı olabileceğini unutmayın. Eğer repost ederseniz, bana (@halfer) ping ve yorum yapacağım. – halfer

cevap

3

, bildiğini gerektiğini düşünüyorum yaklaşık URL rewriting URL

size daha dostça bir görünüm için URL'yi yeniden yeniden.

http://www.downloadsite.com?category=34769845698752354

ve bunun üzerine bir URL yeniden yazma yaptığınızda, bu ihtiyaçları yeniden bu

http://www.downloadsite.com/Nettools/Messengers 

URL gibi oldu altında URL'ye bir göz atın Apache üzerinde ayarlanmış olması yapılandırma (kuralların yeniden yazılması), böylece PHP tarafından yorumlanmadan önce URL'nizi yeniden yazacaktır, böylece

RewriteRule ^/category$ /content.php 
    RewriteRule ^/category/([0-9]+)$ /.php?id=$1 
    RewriteRule 
    ^/category/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$) 
    cat.php?id=$1&sort=$2&order=$3&start=$4 

Size burada her şeyi açıklayamam ama aşağıda URL yeniden yazımı hakkında bilgi edinebileceğiniz bağlantılar sunuyoruz.

Bu kullanışlı URL'ler oluşturmak için yapabileceğiniz en iyi saldırı!

Kaynaklar:

+3

Merhaba Mahan, cevabınızın kendisinde bir örnek veya açıklama sağlamak için Stack Overflow üzerinde alışıldık. Bu, üç şey sağlar: Bağlantı koparsa, cevabınız gelecekteki ziyaretçiler için hala değerli olacaktır ve insanların, soruya verilen yanıtın ötesinde daha fazla derin bilgiye ihtiyaç duyarlarsa Yığın Taşması'ndan ayrılmaları gerekir. Son olarak, örneğiniz uyarlanabilir, oysa bağlantılar muhtemelen genellemelerdir. Eklemeleri yapmak için bu [düzenle] bağlantısını kullanabilirsiniz. Bu yardımcı olur umarım. – jmort253

+0

URL yeniden yazmanın pek çok yolu var ve her yolun gitmesi için uzun bir yol var, bu yüzden web'de bulduğum en iyi bağlantıları seçtim. Peki cevabımı düzenleyeceğim –

+3

* Her * olasılığını göstermek zorunda değilsiniz, ancak bir örnek, postanızın muhtemelen bir yanıt olarak işaretlenmemesini sağlar. Ayrıca, örnekler, milletlerin öğrenmenize yardımcı olur ve yayınınızın daha fazla sayıda alabilmesi olasılığını artırır. İyi şanslar! :) – jmort253

5

Kodunuz oldukça iyi görünüyor ve Stack   Taşma yanıtlarından birinde benzer bir yaklaşım önerdim. Ancak, sadece küçük bir gelişme öneriyorum. Onun yerine:

header("Location: {$rebuilt_url}"); 

Sen yapmalıdır:

header ('HTTP/1.1 301 Moved Permanently'); 
header("Location: {$rebuilt_url}"); 

Bu agresif tarayıcı önbelleğini bu URL'leri izin verir ve kod ve SQL sorguları her zaman yürütülmez. Ayrıca

kontrol edin: sayfa yükleme, id tarafından veritabanından url olsun aynı değilse

  1. .htaccess if URL is bad do something
  2. .htaccess rewrite friendly URLs
İlgili konular