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搜索了,但我似乎无法找到任何答案..
答案 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攻击不会影响它。