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

时间:2014-12-12 02:31:30

标签: php

嗯..所以我有一张表格。我将使用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 ['answer'] ..这会容易受到攻击吗?我用Google搜索了,但我似乎无法找到任何答案..

4 个答案:

答案 0 :(得分:1)

  

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

当你回应(或打印或......)某些东西时,

XSS攻击是可能的。此代码不向浏览器输出任何内容,因此,提供的代码不容易受到攻击。

答案 1 :(得分:1)

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

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

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

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

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

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

如果您确实需要在文本中嵌入文本并对其进行评估,例如动态创建HTML输出或SQL查询,则需要确保正确转义任意用户输入,以免触发不需要的操作特殊规则。 (或其他防止意外评估文本的等效方法,例如SQL的参数化查询。)有关详细信息,请参阅示例How can I prevent SQL injection in PHP?The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

答案 2 :(得分:0)

通常通过在输出上正确处理用户内容来保护XSS攻击。最安全的方法是使用strip_tags或您拥有的htmlspecialchars代码。

简而言之,这就足够了。

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

答案 3 :(得分:0)

isset只会查看$_POST数组中是否有一个名为“answer”的索引。 XSS攻击不会影响它。