2016-04-13 2 views
0

私のURLパス:「+」記号によって間違ったGETリクエストが発生するのを避けるにはどうすればいいですか?

https://mypage/main.php?dir=farm/1234_animal_fred+sam_cats 

私はGETメソッドを使用してデータを要求しています:

$dir = $_GET['dir']; 
echo $dir; 

しかし、私の結果はあなたが常に(でurlencodeを使用する必要があります

farm/1234_animal_fred sam_cats 
+4

はあなたのURLに '+'使用しないでください代わりに '%2B'; https://mypage/main.php?dir = farm/1234_animal_fred%2Bsam_cats – Unex

+0

ありがとう、ありがとうございます! – Jarla

+0

最初に '1234_animal_fred + sam_cats'パーツがどのように生成されますか? – Mike

答えて

2

を助け、彼が得る他の文字が欠けているならば、私はわかりませんよあなたのDBで何かが失敗するか、悪化する可能性がありますが、XSSの脆弱性を引き起こします。だからではなく、それが実行して、この1つの場合で作業することで:

$url = str_replace('+', '%2B', $url); 

あなたは代わりに、それはすべて例のために働くようにしたいです。だから、あなたは、データベースから次いると仮定すると:

$file_path = 'farm/1234_animal_fred+sam_cats'; 

あなたがurlencode()を行う必要があるURLの一部として正しく、この作業を行うには、しかしthis answerからあなたはそれがXSS攻撃からあなたを守るために十分ではないことがわかります。そのため、文字列にhtmlspecialchars()を使用する必要があります。

$url = 'https://mypage/main.php?dir='; 
$file_path = 'farm/1234_animal_fred+sam_cats'; 
$url .= htmlspecialchars(urlencode($file_path)); 

echo $url; // https://mypage/main.php?dir=farm%2F1234_animal_fred%2Bsam_cats 

そして、このURLに行くときには、PHP、正しい値を取得していることがわかります。

print_r($_GET) output: 
Array 
(
    [dir] => farm/1234_animal_fred+sam_cats 
) 
+0

ありがとう!これは私に多くの助けになります! – Jarla

-2

です$ url)あなたのURLをエンコードします。

http://php.net/manual/en/function.rawurlencode.php

クレジットはコメンター、私が応答するために迅速にだったごめんみんなに進みます。

+1

いいえ!その機能を持つURLをエンコードできません。この関数は、文字列をURLの中で使用できるようにエンコードします。それは_huge_の違いです! – arkascha

+2

いいえ、 'urlencode'でURLをエンコードしないでください:) – Eihwaz

+0

@arkascha URLの中で' + 'を使うのは全く不可能ですか? – Jarla

1

あなたのURLには+は使用せず、代わりに%2Bを使用してください。

これが結果です:

https://mypage/main.php?dir=farm/1234_animal_fred%2Bsam_cats

希望これはUNEXの答えは、この特定のケースでは権利であるにもかかわらず、

+1

これは私のコメントです – Unex

関連する問題