2015-04-22 2 views
0

Я пишу PHP-файл, но я не знаю, как лучше всего создать ссылку, пока ссылка находится в том же файле, но с другим ID. То, что я имею в виду, что у меня есть файл с именем test.php и содержит что-то вроде:Как связать с текущим файлом PHP

if ($id == "") { 
    echo "<a href='".$_SERVER['PHP_SELF']."?id=test'>Try the test page</a>"; 
} else if ($id == "test") { 
    echo "Here is the testing content with various information!"; 
} 

Я хочу знать, что лучше для более безопасного кода: $_SERVER['PHP_SELF']?id=test или test.php?id=test.

Я знаю, что он служит для этой же цели сейчас, но если я изменю имя файла $_SERVER['PHP_SELF']?id=test, кажется лучше, потому что он все равно укажет на тот же файл.

Но я хотел бы знать наверняка, что безопаснее.

+0

Почему бы просто не использовать '? Id = test' (без какой-либо страницы), если вы пытаетесь установить ссылку на текущий? – kero

+0

Echoing $ _SERVER [*] подлежит XSS (межсайтовый скриптинг). Однако вы можете закодировать его для защиты от этого. – Devon

+0

Спасибо за помощь! – Standart

ответ

4

Вы не должны печатать $_SERVER['PHP_SELF']; это уязвимость системы безопасности (здесь есть пример: How To Identify The Requested Page In PHP).

Если вы пытаетесь установить ссылку на ту же страницу, но с параметрами запроса (?) или якорями (#), вы можете просто напрямую связать их с ними, как предлагает @kingkero.

<!-- 
 
    The code snippet runs as an iframe from http://stacksnippets.net/js, 
 
    so that's the root of the links you'll see if you click "Run". 
 
--> 
 
<a href="">Link to current page</a><br /> 
 
<a href="?id=test">Add query param to current page</a><br /> 
 
<a href="#anchor">Add anchor tag to current page</a>

ссылки, которые не начинаются с / или протоколом (например, http://) по сравнению с позиции текущего документа. Ссылки, начинающиеся с /, относятся к корню домена. Поведение выложено W3C.

В общем, вы правы, вам следует избегать жесткого кодирования таких вещей, как имя файла в вашем файле. Но вам также, как правило, не нужно использовать данные в $_SERVER для построения ссылок.

+0

Итак, чем более простой способ использования - это просто '? Id = test' без того же имени файла, я прав? – Standart

+0

Правильно. Вы можете попробовать это самостоятельно, просто создайте простой HTML-файл и создайте ссылку, как в моем примере. Откройте файл в браузере, и вы увидите, что нажатие ссылки добавляет параметр запроса. – dimo414

+0

Большое вам спасибо :) – Standart

Смежные вопросы