我正在编写一个程序,要在服务器上运行,该服务器以http://mywebsite.com/program.php?input=42
的形式从客户端获取输入我担心让客户端能够代替上面的42提供任何价值可能会带来安全风险,因为他们可能会在我的服务器上运行代码。我想知道在继续对它做任何事情之前检查这个输入是否只是alphanumberic是足够的保护。如果不是我应该做些什么才能保证安全,如果是这样,是否有任何关于我进行此检查的方式的安全问题(例如,在检查输入是字母数字的时候输入是否是恶意代码可以输入如何运行?)
由于
答案 0 :(得分:1)
这就是你如何解释和使用$_GET['input']
如果您执行此类代码:
exec($_GET['input']);
或
if($_GET['input']) == 66) {
exec("rm -r /");
}
显而易见,人们可以做一些危险的事情。 但它没有你想象的那么重要。
php的问题是它的类型系统不鼓励人们在使用它之前检查他们的输入。
一个常见的例子是SQL可注入代码:
$db->query("SELECT * FROM table WHERE id = '. $_GET['id'].'");
这真的不安全。
在你的例子中,如果你的输入应该是一个整数,你可以检查它是否是一个整数:
if (!is_integer($_GET['input'])) die("invalid");