根据文档ID显示网站中的帖子


Showing posts in the website based on the document ID

我正在创建一个php网站,其中有一个document.php,它基本上接受did (document ID)并显示它。例如mysite.com/document.php?did=1,它通过类似SELECT * FROM documents WHERE id=1的查询从数据库中获取文档内容。我知道这种方法(如SQL注入)的安全问题,我既做验证也做转义,但有人告诉我,创建一个爬虫可以很容易地完成以下操作:

for(int i = 0; i < 3000; ++i) 
   DownloadPage("mysite.com/document.php?did="+i);

现在我有两个问题。

  1. 这真的是我编写的代码的问题吗?或者有其他解决方案吗?例如,我知道我可以告诉Apache服务器限制一个IP的带宽使用。(或者你提出的一个更好的选择。)
  2. 如果这是一个问题,我心中有一个解决方案。我想我应该在页面上添加另一个参数。类似于内容的散列,它将根据DB进行检查,以查看这是否是正确的URL

我经常看到的一件事是,有时标题的某些部分会附加到URL中。类似于以下内容:mysite.com/document/1/some_part_of_the_url,但我已经检查过了,如果我删除标题并转到mysite.com/document/1,它仍然会显示相同的网页。这让我认为这不是出于安全原因,更像是一种帮助用户找出他要访问的页面标题的方式。

通常将标题附加到URL的原因是为了优化搜索引擎。

这些文件应该是安全的吗?如果是这样,则需要实现某种身份验证。模糊的安全性,例如用户不会猜到ID,这不是一个好方法。即使用户名/密码被烘焙到代码中,你也可以很容易地实现用户名/密码,然后使用会话来检查用户是否通过了身份验证。

如果文件不安全,那么我真的不需要担心身份验证。考虑一下,在SO上,您只需访问stackoverflow.com/questions/#{id}.

就可以访问问题

some_part_of_The_url是为了在url中提供一定程度的人类可读性,以利于网络爬虫,如为页面编制索引的谷歌机器人。。。较高的可读性会影响该页面在搜索结果中的"权重"。出于安全考虑,没有这样做。

您可以分配一个哈希值,使其不是序列号,而不是将文档id分配为自动增量,但这会增加代码的复杂性。。。设置记录id的自动增量非常有用。

您最好在Web服务器级别而不是脚本级别限制它(如果您在脚本级别应用它,脚本仍然需要开始运行以进行任何测试)

我不明白的一件事是,这怎么会成为一个安全问题?

  • 让别人使用爬网程序,对你来说,这就像用户访问页面一样,对吧?那里面出了什么问题?

  • 如果你想阻止或限制对它的访问,你可以使用你的php session功能并控制它

  • 如果你想防止用户总是使用id,你应该通过你的逻辑来控制它,如果允许这样的会话用户访问你的特定文档id(有很多逻辑方法可以实现它)

请注意,大多数安全问题都可以通过严格检查仅预期输入来防止,而不是考虑多种解决方案。

现在,这是应用程序中通过编码进行预防的部分。

但安全性不仅如此,错误配置的服务器、网络等也会给您带来问题。