我有一个php页面。它通过get获得id
的值。 2个简单的问题:
1 - 在我的代码中,这只使用一次。在if语句中:
if ($_GET['id']==1){
Things here....
}
这是唯一使用此传递的id值。我是否需要对其进行消毒?或者我可以将其安全地保存在if语句中而不进行检查吗?黑客可以穿透这个吗?
2 - 如果我将它分配给变量,我是否需要对其进行消毒:
$idid=$_GET['id'];
if ($idid==1){
Things here...
}
就像之前这是该变量的唯一用途一样,它不会在echo或mysql等中使用。
答案 0 :(得分:2)
如果将GET值插入某个可能有害的地方,即echo
(XSS),mysql_query
(SQL注入),eval
(PHP,则只需要担心卫生问题执行),shell_exec
(Shell执行),......(Exploitable PHP functions更广泛的列表)
只需检查一个值就不需要任何卫生设施了。
答案 1 :(得分:1)
不,你不需要对它进行消毒,因为如果它没有除1之外的任何值,它就什么都不做。
答案 2 :(得分:0)
我是否需要对其进行消毒或者我可以将其安全地保存在if语句中而不进行检查吗?
这取决于您希望达到的质量水平。看起来你访问了一个你没有测试存在的密钥的$_GET
数组。
这可以触发通知,例如“注意:未定义的索引:id”,其中也包含文件名。
根据服务器配置的不同,此消息可能会发送给请求相关网站但未提供id
网址查询参数的所有人。
除了向潜在攻击者提供的信息之外,传播通知会使您难以为整个脚本达到一定的质量水平,例如:如果您决定将通知和错误转换为反馈以维护和改进脚本。
黑客可以穿透这个吗?
此信息可用于进一步渗透您的网站。
根据您显示的代码,您不会进一步使用变量/值,据我所知,information exposure旁边没有其他问题。
它总是受制于您想要实现的目标,安全性并非一成不变。请参阅Defensive programming,Secure input and output handling和Postel's law。
答案 3 :(得分:-2)
使用===而不是==来确定条目的类型。 在我看来,你不需要做很多努力来保护输入。 只确保输入确实是一个数字。