是否有可能以这种方式破解使用未过滤GET参数的网站


Is it possible to hack a website which use unfiltered GET parameter this way

有没有办法在我的网站上执行一些代码,使用以下代码:

$a = $_GET['a'];
$b = 'abc' . $a;
$c = $a;

而且,假设代码中将不再使用$a、$b和$c变量 - 只是一个赋值,例如连接。是否可以在这个地方执行一些恶意代码?(实际上我认为答案是否定的,因为那样就根本不可能出现卫生设施)。

那么这个怎么样(我很确定,如果我们把一些字符放到$a中,它很容易被转义为逗号,在某些内部 http 和 php 处理期间):

$a = $_GET['a'];
$b = "abc $a";

对不起,我知道,这是基础和愚蠢的问题,我应该使用一些好的消毒剂库,不要担心。但我想确定,从非常基础开始,我不能说,该网站是 100% 安全的,而它没有被黑客入侵,我只能说当有一天它偶尔被黑客入侵时它是不安全的。

补充:任何破解这两个脚本中任何一个的例子将不胜感激,我想破解我自己的网站,其中包含上面发布的代码,以清楚地理解,"在这个地方,如果你以这种方式编程,你的网站将容易受到攻击,所以你应该以这种(另一种)方式编程。

而且,假设代码中将不再使用$a、$b和$c变量 - 只是一个赋值,例如连接。是否可以在这个地方执行一些恶意代码?

不。您必须将数据放在某个地方,将其视为代码而不是纯数据,以免存在漏洞。(至少在这种情况下,因为您不必担心缓冲区溢出)。

那么这个怎么样(我很确定,它是脆弱的,如果我们把一些字符放到$a中,在一些内部 http 和 php 处理期间,这些字符将无法转义为逗号):

再次,没有。URL 解码例程本身没有任何已知的漏洞,并且您不会将数据放在逗号具有任何重要意义的任何地方。将一个字符串变量内插到另一个字符串中是完全安全的。(您稍后可能会对生成的字符串执行一些不安全的操作,但这超出了您的问题范围。

是或否,取决于以后如何处理这些数据。

是的,如果此数据被存储、显示或发送到另一个系统,因为可能滥用这些服务(存储到 SQL 可能容易受到 SQLi、显示到 XSS 等的影响)。例:

print($a); // Someone see this in browser or console?
$sqlConnection->insert($a); // Is insert() sanitizing input or not?

不,当您不使用上述数据处理,而只是像您的示例一样在内部使用它时。

同样,如果您将此字符串输出到控制台或日志,它可能会滥用它们并做一些不受欢迎的事情。最好从输入变量中删除不需要的字符(或采取另一种清理路线)并保持安全,而不是后悔。