使用 isset() 的 PHP 表单安全性


PHP Form Security using isset()

嗯。所以我有一个表格。我将检查用户是否使用 isset(( 函数"回答"表单。但是,这会容易受到XSS攻击吗?

if (isset($_POST['answer'])) {
    $answer = htmlspecialchars($_POST['answer'], ENT_QUOTES, 'UTF-8');
    // Do other stuffs here using $answer variables..
}
else {
    // Form here
}

当我检查"isset"时,我没有用HTMLspecialchars"解码"$_POST['答案'].这会容易受到攻击吗?我用谷歌搜索了一下,但我似乎找不到任何答案。

XSS 使攻击者能够将客户端脚本注入网页 由其他用户查看。

当您回显(或打印或...(某些内容时,XSS攻击是可能的。此代码不会向浏览器输出任何内容,因此,提供的代码不易受攻击。

XSS攻击,SQL注入攻击和许多相关问题发生在根据特定规则在特定上下文中评估任意值时,并且没有足够注意确保输入值不会触发不需要的规则和副作用。

这具体意味着什么?例如:

<script src="foo/bar.js"></script>

此文本片段在评估为 HTML 时会触发某些操作。当您将其评估为纯文本时,或者将其存储在数据库中时,或者将其打印到一张纸上时,它不会执行任何操作。

如果您的某个用户在表单中提交此类值,则它只是文本,不会伤害任何人。只有当你把它放到HTML中并让浏览器评估它时,它才会开始"做"一些事情。这是一种XSS攻击。

仅仅做if (isset($_POST['answer']))不会对文本本身做任何事情。它不评估文本的值。它所做的只是检查数组索引是否存在。您甚至可以安全地执行substr($_POST['answer'], 10)或任何其他可能的文本操作,没有任何内容会使用 HTML 规则解析和评估字符串。

当您确实需要在文本中嵌入文本并对其进行评估时,例如动态创建 HTML 输出或 SQL 查询,您需要确保正确转义任意用户输入,以免触发不需要的特殊规则。(或其他等效方法,以防止意外计算文本,例如 SQL 情况下的参数化查询。例如,请参阅如何防止 PHP 中的 SQL 注入?和 大逃避主义 (或:处理文本中的文本需要知道的内容(以获取深入的细节。

isset只会检查$_POST数组中是否有一个名为"answerswer"的索引。 XSS 攻击不会影响它。

XSS 攻击通常通过正确处理输出上的用户内容来防止。最安全的方法是使用strip_tags或您那里的htmlspecialchars代码。

简而言之,这就足够了。

不过,您可以在输出之前进行转义,如果这对您来说更方便的话。尝试的XSS根本不会影响您的PHP代码。