具有动态内容的查询字符串
如果我有这个索引:
if (isset($_GET['se'])) {
$se= $_GET['se'];
if (file_exists("{$se}.php")){
require("{$se}.php");
}
else {
require("page_error.php");
}
}
else {
require("page_error.php");
}
像下面这样的链接不起作用:
$pwrurl = "http://example.com/login/?se=change_password?usermail=".$email."&usercode=".$linkHash;
只有像这样的链接才会被接受:http://example.com/login/?se=change_password
。
这个问题能解决吗?
If I have this index:
if (isset($_GET['se'])) {
$se= $_GET['se'];
if (file_exists("{$se}.php")){
require("{$se}.php");
}
else {
require("page_error.php");
}
}
else {
require("page_error.php");
}
A link like the following doesn't work:
$pwrurl = "http://example.com/login/?se=change_password?usermail=".$email."&usercode=".$linkHash;
Only something like: http://example.com/login/?se=change_password
will be accepted.
Can this be solved?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
提防!
让用户决定包含哪个文件而不进行任何验证会给您的服务器带来漏洞。他们可以将您的脚本指向任何敏感文件。
您应该限制可以包含的内容的可能性,如下所示:
这样它们只能读取您放入数组中的文件。
编辑:此外,就像其他人所说的那样,您应该使用 & 分隔 URL 中的不同 param=argument 对。而不是?这 ?用于将页面名称与参数列表分开。
Beware!
Letting the user decide which file to include without any validation will introduce a vulnerability to your server. They could point your script to any sensitive file.
You should limit the possibilities of what can be included, like this:
This way they can only read the files you put in the array.
Edit: Also, just like everyone else said, you should separate different param=argument pairs in the URL with & instead of ?. The ? is used to separate the page name from the argument list.
URL 中有两个
?
。多个参数必须用&
分隔。您使用
require
是非常危险。阅读有关安全的内容。在将任何参数传递给如此危险的函数之前,请先对其进行验证,否则您的网站将立即遭到黑客攻击。You have two
?
in the URL. Multiple parameters have to be separated with&
.Your use of
require
is very dangerous. Read up on security. Validate any parameter before passing it to such a dangerous function, or your site will be hacked in no time.链接错误,应该是“&”而不是“?”更改密码后。
The link is wrong, it should be '&' instead of '?' after change_password.