无论使用何种编程语言,我总是对通过if
语句实现安全性的概念感到困惑。我所编写的所有代码都依赖于这一行代码的成功执行:
user = getUserName();
password = getPassword();
if (match(user, password)) {
print secret information;
}
因为只有一行代码,我觉得破坏可能相对简单。我是否忽略了什么,或者单个if
确实是最好的方法?
无论使用何种编程语言,我总是对通过if
语句实现安全性的概念感到困惑。我所编写的所有代码都依赖于这一行代码的成功执行:
user = getUserName();
password = getPassword();
if (match(user, password)) {
print secret information;
}
因为只有一行代码,我觉得破坏可能相对简单。我是否忽略了什么,或者单个if
确实是最好的方法?
if
容易被黑客攻击。如果有人反向工程这个应用程序,你可以很容易地修改几个指令来跳过if
。if
的强大能力的确切关注。 - undefined$password==$_GET['password']
应该可以正常工作。if(preg_match('/(.+)\\.js/'.$_GET['file'])){
readfile($_GET['file']);
}
?file=../../.js/../../../../../../../etc/passwd
在一行代码中使用if
并不会导致不安全问题。
如果代码在您的服务器上运行,重要的是服务器的安全性如何。如果黑客获取了访问权限,您的代码有多么复杂都无所谓,他都可以绕过它。
同样,如果您的代码在潜在攻击者的计算机上运行(比如一个您想要保护的电脑游戏),您无法阻止攻击者。您只能使攻击者的工作稍微困难一些,但也仅此而已。
你不应该担心一行代码的安全性,而是要关注整个系统的安全性。如果你让你的代码更加复杂,那么你只是为潜在漏洞引入了更多可能性。使用更加复杂的代码是试图通过混淆来增强安全性,这是不起作用的。
如果您不能信任您的计算机正确地执行简单的if
语句,那么您根本就不能信任它。
我不确定是否理解你的问题。
软件安全技术并不完美,据我所知,它们假设编译器中存在一些错误,并且需要一个“完美”的硬件(也就是处理器能够正确解释机器码)。
对于不完美的硬件,我不熟悉(但很感兴趣)相关方法(除了使用冗余或其他技术,如ECC,来检测硬件错误)。
if
语句来实现的,我也不会感到惊讶,并且这些专家们认为整个过程是安全的。我认为if
并没有什么特别之处 - 按照定义,你必须通过某种方式进行分支判断,无论是通过if
、多态性,甚至是巧妙的间接跳转。关键是决策本身(条件)是否可以被操控。 - user395760