下面的php代码能做什么?

下面的php代码能做什么?,php,xss,Php,Xss,我需要帮助理解PHP上的XSS。在这种特殊情况下有哪些安全漏洞 <?php $test = NULL; $name = $_REQUEST['name']; if(!$test){ die("$name cannot be found"); } ?> 编辑。为什么它给我看PHPINFO?链接 输入此项,您将看到: index.php?name=%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0Awindow.location.

我需要帮助理解PHP上的XSS。在这种特殊情况下有哪些安全漏洞

<?php
$test = NULL;
$name = $_REQUEST['name'];

if(!$test){
    die("$name cannot be found");
}

?>
编辑。为什么它给我看PHPINFO?链接


输入此项,您将看到:

index.php?name=%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0Awindow.location.href%20%3D%20%22http%3A%2F%2Fgoogle.de%22%3B%0A%3C%2Fscript%3E
在本例中,您将转到google。在现实世界中,你会去一个仿冒网站,它看起来和你的网页一模一样

要对此进行调整,您需要删除标记,例如:

$name = strip_tags($name);
另外,还有一个功能更强大的框架:

这里也有:

$name = "''.print phpinfo().''";
我想说:

''.print phpinfo().'' cannot be found
原因是,打印phpinfo。已经是一个字符串了。您需要评估$name;让它执行。你最好马上忘记评估

另请注意:

$test = NULL;

if (!$test){}; //true
if ($test){}; //false
if ($test === false){}; //false
if ($test === true){}; //false
if ($test === null){}; //true
供您编辑:

我的坏消息,行$name=.print phpinfo。我的意思是,如果你有一个像这样的url index.php?name=%27%27.print%20phpinfo.%27%27%3B,它基本上代表$name=.print phpinfo。而不是$name=。打印phpinfo

指:

如果我想为您的$name输入代码,请打印phpinfo。;,我会将其转义到%27%27。打印%20phpinfo。%27%27%3B

现在您有了这一行:

$name = $_REQUEST['name'];
$name = "''.print phpinfo().''";
die("$name cannot be found");
在本例中,您编写GET变量的内容。打印phpinfo。;作为字符串输入到您的$name中

所以你的基本思路是:

$name = $_REQUEST['name'];
$name = "''.print phpinfo().''";
die("$name cannot be found");
这将输出简单的:

''.print phpinfo().''
那么为什么这一行给出PHP信息输出呢

$name = ''.print phpinfo().'';
它由三部分组成:

返回空字符串 打印phpinfo从打印返回1;print命令无效,因为phpinfo返回void;phpinfo完成他的工作并在此时输出信息 返回空字符串 因此,您为$name分配了一个字符串链,该字符串链没有任何内容,1,没有任何内容。这意味着,$name='1'。在本作业中,您已经打印了phpinfo

这一行:

$name = $_REQUEST['name'];
$name = "''.print phpinfo().''";
die("$name cannot be found");

附加到已输出的信息后,找不到文本1

嗯。。。那除了死之外什么都做不了。告诉我们你在哪里用$name做什么,我们也许可以告诉你XSS漏洞在哪里。否则这个问题就没有实质内容了。在地址栏中运行它,比如index.php?name=alert'haha!抓住你了;您将看到$name=.print'HELLO'。;输出:HELLO1不能为空found@user3524402从您所展示的内容来看,$name等于多少并不重要。重要的是你用它做什么。