是否可以通过这种方式破解使用未过滤 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% 安全的,我只能说它在有一天偶尔被黑客攻击时是不安全的。

已添加: 任何破解这两个脚本中的任何一个的示例都将不胜感激,我想破解我自己的网站,其中包含上面发布的代码,以便清楚地理解, “在这个地方,如果您以这种方式编程,您的网站将容易受到攻击,因此您应该以这种(另一种)方式对其进行编程。

And, let's say, there will be no more usage of $a, $b and $c variables in the code - just an assignment and, for example, concatenation. Is it possible to execute some malicious code in this place?

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

And how about this one (I'm pretty sure, it is vulnerable, if we put some characters into $a, that will be unescaped to commas during some internal http and php proccessing):

同样,不。 URL 解码例程本身没有任何已知漏洞,并且您不会将数据放在逗号具有任何重要意义的任何位置。将一个字符串变量插入另一个字符串是完全安全的。 (您稍后可能会对不安全的结果字符串执行某些操作,但这超出了您的问题范围。)。

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

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

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

不,如果您不使用上述数据处理,只是像您的示例那样内部使用它。

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