2012-03-03 83 views
1

我在创建php网站,其中我有一个document.php,基本上需要did (document ID)并显示它。一个例子是mysite.com/document.php?did=1,它使用诸如SELECT * FROM documents WHERE id=1之类的查询从数据库中获取文档内容。我知道这种方法(如SQL注入)的安全问题,我都做了验证和转义,但有一个人告诉我的一件事是,创建一个爬行器可以非常简单:在网站上显示文章ID

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

现在我有2个问题。

  1. 这是真的是我写的代码还是有另一个解决方案呢?例如,我知道我可以告诉Apache服务器限制一个IP的带宽使用。 (或者可能是你提供的一个更好的选择。)
  2. 如果这是一个问题,我有一个解决方案在我的脑海。我想我应该添加另一个参数到页面。就像内容的散列一样,将根据数据库检查它是否是正确的URL。

有一件事我看到很多是有时标题的一部分被追加到URL。就像这样: mysite.com/document/1/some_part_of_the_url但我检查过了,如果我删除标题并转到mysite.com/document/1它仍然会显示相同的网页。这让我觉得这不是出于安全原因,更像是帮助用户找出他要访问的页面的标题。

+0

如果没有别的,使用URL中的标题将帮助您与SEO。没有人会在Google中搜索“Post#1”:) – jmort253 2012-03-03 10:42:26

+0

是可供所有页面浏览者或仅登录用户使用的文档吗? – 2012-03-03 10:43:53

回答

1

的原因,标题一般是附加到URL是用于搜索引擎优化。

文件应该是安全的吗?如果是这样,您需要实施某种认证。默默安全用户不会猜测ID不是一个好办法。即使将用户名/密码放入代码中,然后使用会话来检查用户是否已通过身份验证,也可以非常轻松地实现用户名/密码。

如果文件不安全,那么我真的不觉得有必要担心身份验证。考虑一下,你可以通过访问stackoverflow.com/questions/#{id}来查看问题。

+0

谢谢。这(以及所有其他答案)是我认为是正确的。这就是我第一次问到我的代码是否真的有问题?对于第一部分(为URL添加标题的一部分),我该如何在PHP中完成它?我非常感谢你的帮助。 – 2012-03-03 11:07:54

+0

你想查看的是使用mod_rewrite的规范URL。谷歌它,你会发现很多教程 – christophmccann 2012-03-03 11:11:07

1

some_part_of_the_url在网址中提供一定程度的人工可读性,以便抓取网页等搜索结果的网页爬虫(例如googlebots)......更高的人工可读性会影响搜索结果中该网页的“加权” 。这不是出于安全原因。

而不是将文档id分配为自动增量,您可以指定一个散列值,以便它们不会是连续的数字,但这会增加代码的复杂性...设置记录ID的自动增量功能非常有用。

你最好限制在这个web服务器级别而非脚本级别(脚本仍然需要开始运行做任何测试,如果你申请这个在脚本级别)

1

我不明白的一件事是,这是如何变成安全问题的?

  • 让某人使用抓取工具,对于你来说,它就像用户访问一个页面一样,对吗?那么它有什么问题?

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

  • 如果要防止用户不约而同地使用IDS,你应该通过你的逻辑控制它,如果这样的会议允许用户在您的特定文档ID的访问(很多合乎逻辑的方式来acheive它。)

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

现在这是通过您的应用程序的编码预防部分。

但是安全性不仅仅是这样,错误配置的服务器,网络等也可能为您造成问题。