在PHP中,当设置表单的action属性时,是否需要在放置普通URL时采取任何安全措施?

在PHP中,当设置表单的action属性时,是否需要在放置普通URL时采取任何安全措施?,php,security,Php,Security,我目前正在学习PHP。似乎每次我学到新东西时,我都需要做很多不同的事情,以确保它不会成为安全威胁。不抱怨这个。我只是说,我有点偏执,只想在PHP中做任何事情,而不首先确保它的安全性。所以这可能是完全没有必要的,也是一个非常愚蠢的问题,但因为我是新来的,我不知道 所以您知道当使用$\u SERVER['PHP\u SELF']作为表单的action属性时,有必要使用htmlspecialchars()来防止XSS?我的问题是:如果你只是把普通的旧网址。例如: <form action="pr

我目前正在学习PHP。似乎每次我学到新东西时,我都需要做很多不同的事情,以确保它不会成为安全威胁。不抱怨这个。我只是说,我有点偏执,只想在PHP中做任何事情,而不首先确保它的安全性。所以这可能是完全没有必要的,也是一个非常愚蠢的问题,但因为我是新来的,我不知道

所以您知道当使用
$\u SERVER['PHP\u SELF']
作为表单的action属性时,有必要使用
htmlspecialchars()
来防止XSS?我的问题是:如果你只是把普通的旧网址。例如:

<form action="process.php">


在放入“process.php”之前是否需要对其进行任何操作?

否。
$\u服务器['php\u SELF']
由php运行时定义。您不需要转义这个值,除非您不信任脚本本身的名称。如果您是文件名的作者,那么这将是完全安全的。但是,如果文件名是由用户创建的,则应确保文件名具有一组安全的字符。

否。
$\u服务器['PHP\u SELF']
由PHP运行时定义。您不需要转义这个值,除非您不信任脚本本身的名称。如果您是文件名的作者,那么这将是完全安全的。但是,如果文件名是由用户创建的,则应确保文件名具有一组安全的字符。

应使用
htmlspecialchars()
$\u服务器['PHP\u SELF']
上的等效文本到HTML编码函数或任何其他文本变量

受信任/不受信任的数据源问题缺少一个更基本的要点:不应将纯文本视为HTML。如果要显示文本值,则需要将其转义/编码为HTML,无论它是否来自安全源。(这常常使事情更容易推断:大多数数据源都是纯文本,并且应该总是被转义。您只需要仔细考虑数据源的安全性,就可以得到很少的机会得到HTML数据,因此出错的机会就更少了)。 此变量包含文本值,而不是HTML值,因此必须对其进行编码

$\u服务器['PHP\u SELF']
是否可能包含实际危险的值?不,不太可能。我见过一些奇怪的情况,它可能会导致页面中出现语法错误,但没有任何可利用的漏洞(尽管在假设的人为情况下可能会发生)。但是你仍然应该对它进行编码,因为这是正确的做法,而且这个习惯在其他情况下会保护你



如果您只是将值
action=“process.php”
硬编码到源代码中,那么就可以了。您无需担心:您可以看到其中没有需要编码的字符。好像它已经被编码了。在这种情况下,您不必担心意外重命名为将来不小心的文件名会造成意外的麻烦。

您应该使用
htmlspecialchars()
$\u服务器['PHP_SELF']
上的等效文本到HTML编码函数或任何其他文本变量

受信任/不受信任的数据源问题缺少一个更基本的要点:不应将纯文本视为HTML。如果要显示文本值,则需要将其转义/编码为HTML,无论它是否来自安全源。(这常常使事情更容易推断:大多数数据源都是纯文本,并且应该总是被转义。您只需要仔细考虑数据源的安全性,就可以得到很少的机会得到HTML数据,因此出错的机会就更少了)。 此变量包含文本值,而不是HTML值,因此必须对其进行编码

$\u服务器['PHP\u SELF']
是否可能包含实际危险的值?不,不太可能。我见过一些奇怪的情况,它可能会导致页面中出现语法错误,但没有任何可利用的漏洞(尽管在假设的人为情况下可能会发生)。但是你仍然应该对它进行编码,因为这是正确的做法,而且这个习惯在其他情况下会保护你



如果您只是将值
action=“process.php”
硬编码到源代码中,那么就可以了。您无需担心:您可以看到其中没有需要编码的字符。好像它已经被编码了。在这种情况下,您不必担心意外重命名为将来不小心的文件名会造成意外的麻烦。

除非您的应用程序为用户提供了一种方法来操作
$\u SERVER['PHP\u SELF']
。相关阅读@CollinD因此,基本上,在没有任何安全措施的情况下将URL的纯文本硬编码到action属性中是可以的,对吗?除非您的应用程序为用户提供了一种操作
$\u SERVER['PHP\u SELF']
相关阅读的方法@CollinD所以基本上,只需将URL的纯文本硬编码到action属性中就可以了,没有任何安全措施,对吗?