PHP:已知的带有';注意:未定义索引:变量';

PHP:已知的带有';注意:未定义索引:变量';,php,Php,对不起,如果已经在其他地方解释了,我已经搜索了又搜索,没有找到答案 起初,看到这个通知让我想修复它,但经过思考——它会带来什么伤害 在下面的例子中,有人怎么可能恶意利用? 如果他们不能,也许有人可以给我举个例子,说明这个“未定义索引”通知可能会导致问题 if($_GET['action']=="update"){ ~code~ } 我知道上面的例子可以通过使用“isset”这样简单的方法来修复,但我还有其他一些地方需要注意,比如下面围绕着一个代码类似于: print "<input

对不起,如果已经在其他地方解释了,我已经搜索了又搜索,没有找到答案

起初,看到这个通知让我想修复它,但经过思考——它会带来什么伤害

在下面的例子中,有人怎么可能恶意利用? 如果他们不能,也许有人可以给我举个例子,说明这个“未定义索引”通知可能会导致问题

if($_GET['action']=="update"){   ~code~  }
我知道上面的例子可以通过使用“isset”这样简单的方法来修复,但我还有其他一些地方需要注意,比如下面围绕着一个代码类似于:

print "<input value='".$_POST['value']."'>";
print”“;

高级用户是否有可能使用漏洞?

通知不是关于安全问题的警告。它有助于防止逻辑错误。您正在请求此索引,但它不存在:

  • 它应该存在吗?为什么你以前没有设定呢
  • 它被删除了吗?为什么?您是否仍然可以访问它
  • 钥匙换了吗?你为什么还没有呢 调用
    操作
    时是否考虑到该更改
这只是PHP的好处:它不存在,我会初始化它,但你不希望我找到什么吗

请记住,PHP是一种非常松散的语言。它的目的是快速创建应用程序,让程序员专注于逻辑,而不是细节。通知(最近实现的)是一种使逻辑更清晰的方法,不会在第一个小错误时停止整个程序


当然,这是一个非常好的习惯:修复所有警告、错误和通知,以确保您的逻辑完全按照您希望的方式运行。计算机是愚蠢的,这是事实。他们总是按照你的要求去做,即使你问他们一些愚蠢的事情。

通知并不是关于安全问题的警告。它有助于防止逻辑错误。您正在请求此索引,但它不存在:

  • 它应该存在吗?为什么你以前没有设定呢
  • 它被删除了吗?为什么?您是否仍然可以访问它
  • 钥匙换了吗?你为什么还没有呢 调用
    操作
    时是否考虑到该更改
这只是PHP的好处:它不存在,我会初始化它,但你不希望我找到什么吗

请记住,PHP是一种非常松散的语言。它的目的是快速创建应用程序,让程序员专注于逻辑,而不是细节。通知(最近实现的)是一种使逻辑更清晰的方法,不会在第一个小错误时停止整个程序


当然,这是一个非常好的习惯:修复所有警告、错误和通知,以确保您的逻辑完全按照您希望的方式运行。计算机是愚蠢的,这是事实。他们总是按照你的要求去做,即使你问他们一些愚蠢的事情。

一般来说:如果有人能看到你的PHP消息(不管是通知还是警告),他就会知道关于你脚本的一些信息:可能,它的结构,使用的变量和参数名称e t.c.-即在正常情况下不应看到的此类信息。有了这些信息,执行一些有害的操作就容易多了


然而,这不仅仅是安全问题。在任何情况下收到通知都表明可能出了问题——你的注意力应该集中在这一点上。我的建议是:您应该编写代码,它不会产生任何错误级别的通知/警告。

一般来说:如果有人能看到您的PHP消息(不管通知/警告),他就会知道关于您的脚本的一些信息:可能,它的结构,使用的变量和参数名称e t.c.-即在正常情况下不应看到的此类信息。有了这些信息,执行一些有害的操作就容易多了


然而,这不仅仅是安全问题。在任何情况下收到通知都表明可能出了问题——你的注意力应该集中在这一点上。我的建议是:您应该编写代码,它不会产生任何错误级别的通知/警告。

未定义的索引错误与安全问题无关。这意味着在表达式中使用变量之前,没有正确初始化变量。不管有什么安全隐患,您都应该修复它,因为这意味着您的代码不正确


现在回到您最初关心的问题,来自用户输入的任何数据在存储到数据库之前都应该经过清理。您可以使用多种技术。从类型转换到使用mysqli_real_escape_string()和strip_tags()等函数转义数据,再到使用准备好的语句。你应该仔细阅读这个话题。数据清理不是“一刀切”的事情。根据数据的性质和使用方式,可以使用不同的策略

未定义的索引错误与安全问题无关。这意味着在表达式中使用变量之前,没有正确初始化变量。不管有什么安全隐患,您都应该修复它,因为这意味着您的代码不正确


现在回到您最初关心的问题,来自用户输入的任何数据在存储到数据库之前都应该经过清理。您可以使用多种技术。从类型转换到使用mysqli_real_escape_string()和strip_tags()等函数转义数据,再到使用准备好的语句。你应该仔细阅读这个话题。数据清理不是“一刀切”的事情。根据数据的性质和使用方式,可以使用不同的策略

混淆您使用$\u GET然后使用$\u POST..使用未初始化的GET和POST已经是一个很大的漏洞,除此之外,这些通知将向您的黑客提供一些元信息,他可以从中受益。一般来说,是关于生产系统的