某种方式如何“防止”用户修改网址

时间:2013-12-12 15:51:52

标签: php

在一个页面中有多行记录(信息)。

用户可以点击每行末尾的链接。打开新页面(弹出窗口),如host/pageaddress.php?id=777 777是mysql行的id。在新页面中,我显示以id 777在mysql中记录的信息。

如果用户想要,他可以将777更改为任何其他数字并显示相应的mysql行。以这种方式修改id,用户只能访问允许用户访问的表和行。目前我不知道任何安全漏洞,因为这样的修改(如果有人知道,请写,)。

但我不想让用户进行这样的修改(感觉不舒服)。搜索时我发现信息,我无法阻止用户修改。但是知道一个网站,我无法修改网址 enter image description here

试图在地址栏中写点什么,我不能。我不知道为什么(也许是因为https?)

所以现在想想以下解决方案。

在主页面上创建$_SESSION['display'] = 'something';

在新的弹出页面中

if(isset($_SESSION['display'])){
echo ' content';
}

然后在页面unset($_SESSION['display']);

的底部

因此,如果用户修改了网址,页面重新加载并且未设置$_SESSION['display']。所以没有内容。

请提供建议,如果这样的解决方案没问题?一些更好的解决方案?

更新 上述解决方案似乎毫无用处。但如果要考虑解决方案,可以在这里互相思考:

1)在主页面上创建哈希,并命名为$hash

2)$_SESSION['display'] = $hash;

3)在mysql中记录$hash

4)在新的弹出窗口(文件)中检查`$ _SESSION ['display']'是否存在并且等于mysql中的hash。在页面末尾unset hash并从mysql中删除

这只是考虑可能的解决方案......它有用吗?

1 个答案:

答案 0 :(得分:4)

  

如果用户需要,他可以将777更改为任何其他号码

是。绝对无法控制用户指示浏览器向服务器询问的内容。

  

并显示相应的mysql行。

如果您只想让某些行可供用户使用,请对该用户进行身份验证,并检查他们是否有权查看该行。

例如,一些pesudo代码:

if user is not logged in
    provide login page
else
    if user id matches row's owner id field
        provide data
    else
        provide error message
  

但是知道一个网站,我无法修改网址

当您打开弹出窗口并告诉它不显示工具栏时会发生这种情况。它不提供任何安全性,因为用户仍然可以将URL复制到新窗口并根据需要进行修改。

  

因此,如果用户修改了网址,页面重新加载并且没有设置$ _SESSION ['display']

这只是意味着他们必须在访问主页面和点击弹出窗口的时间之间将URL复制到新窗口。

这很麻烦,但很不安全。

相关问题