2013-04-06 7 views
8

Stack  オーバーフローURLのようなサイトのビルドURLがあります。私のURLは以下の通りです。このURLでスタックオーバーフローのURLはどのように機能しますか?

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

1255544は、IDとthis-is-the-url-textは、URLのタイトルテキスト、データベースに格納された両方です。 Stack  オーバーフローURLがidの基底で動作することに気づいた。ここでの仮定スタックオーバーフロー のURLは15679171はポストのIDであり、このURLで

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

です。

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

そして、私は

以下のようなURLのタイトルテキストの一部の一部を削除しようとした:私は new-way-to-prevent-xss-attacksに触れることなく 15706581にこのIDを変更してEnterを押すときに、URLは自動的に次のURLに変更します
http://stackoverflow.com/questions/15679171/new-way-to-preve 

それは自動的に以下のようにURLを修正:

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

、データがデータベースから取得されていることを意味id 15679171および関連するURLタイトルテキストnew-way-to-prevent-xss-attacksに基づいて、idに従って添付されます。

これもやりたいしかし、問題は、誰かがURLのidを変更すると、タイトルテキストが自動的に変更されるはずであるということです。これはどうすればいいですか?それはこのアクションを実行したりしないように、適切かつ効率的な方法

$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 
} 

です:

私は、次の考えていますか?解決策はありますか?

+1

を、ページの読み込みが、idでデータベースからURLを取得するとき、それは同じではない場合は、アドレスバーからURLとそれを比較します右のURLにリダイレクトします。 –

+0

また、SQLインジェクションに注意してください($ url_idをint型にキャストするとそのトリックを行う必要があります)。 –

+0

こんにちは。あなたは最近、 "Stackoverflow Questions Answers System Worksの仕組み"という質問を投稿しました。それはモデレータによって誤って別のサイトに移行されました。おっと、彼らのために叩かれます: ')。私はあなたがそれを再投稿することをお勧めします(コピー&ペーストを使用してください)、それを "StackOverflowのようなシステムを最適化する方法"と呼んでください。コメントには一般的な発言があるかもしれませんが、あまりにも話題にはなりすぎるかもしれません。あなたが再ポストしたら、ここで私にpingしてください(@halfer)。私はコメントします。 – halfer

答えて

3

あなたがApacheを使用している場合、私はあなたがより親しみやすい外観にURLを書き換える書き換えURLは約URL rewriting

を知っていなければならないと思います。

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

以下のURLを見て、あなたがそれにURL書き換えを行うとき、それは、Apacheに設定する必要性を書き換え、この

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

URLのようになりましたあなたが取得したい正確なリソースを取得するように、リクエストがPHPによって解釈される前にあなたのURLを書き換えるように設定(書き換えルール)を設定します。

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 

ここではすべてを説明することはできませんが、以下ではURLの書き換えについて学ぶことができるリンクをご紹介します。

これは、フレンドリーなURLを作成するために行うことができる最高のハッキングです。

資源:

+3

こんにちはマハン、それはあなたの答えの本体に例または説明を提供するためにスタックオーバーフローで習慣的です。これは3つのことを保証します:もしリンクが壊れても、あなたの答えは未来の訪問者にとって価値があり、質問に対する答え以外の詳細な情報が必要な人はStack Overflowを離れる必要があります。最後に、あなたの例を調整することができますが、リンクは一般化可能性があります。この[編集]リンクを使用して追加を行うことができます。お役に立てれば。 – jmort253

+0

URLの書き換えにはさまざまな方法があります。すべての方法が長くなるので、私はウェブ上で見つけたいくつかの最良のリンクを貼ります。さて、私は自分の答えを編集します –

+3

あなたはすべての*可能性を表示する必要はありませんが、例はあなたの投稿が答えではないとフラグされないようにします。さらに、例は人々が学び、あなたのポストがより多くのアップフォースを得る機会を増やすのを助けます。がんばろう! :) – jmort253

5

あなたのコードはかなりよく見えます。私のスタックの1つにあります。 オーバーフローの回答私も同様のアプローチを提案しました。しかし、私はちょっとした改善がほしいと思う。代わりに:

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

あなたは実行する必要があります。

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

これは積極的にブラウザのキャッシュにこれらのURLをできるようになるし、あなたのコードとSQ​​Lクエリが毎回実行されることはありません。

次もチェック:

  1. .htaccess if URL is bad do something
  2. .htaccess rewrite friendly URLs
関連する問題