PHP:有关公共URL和查询的初学者问题

时间:2018-08-30 12:31:27

标签: php

我已经开始研究PHP,并且有一个我似乎不理解的问题。

例如我在以下网址有一个PHP脚本:http://example.com/Test.php

如果此脚本的查询要求用户(从GET获取)的参数,那么我可以像这样轻松地执行它:

http://example.com/Test.php?uid=2

查询可能是

从* UID = 2的用户中选择*

现在我读到,如果我想获取敏感信息/上载到服务器,我应该使用POST,但是即使我使用POST,我仍然可以在Postman中使用参数执行相同的操作,并且查询仍然会执行。

我阅读了有关SQL注入的信息,发现PDO很有用,因为PDO将查询与数据分开发送到服务器。

我已经用PDO重写了第一个查询,但是我仍然可以使用URL http://example.com/Test.php?uid=2来执行它。我在这里做错了什么?我误会了吗?

问题:

  • 可以正常访问脚本吗?因为对我来说这似乎很不安全。
  • 当我可以在Postman中重现相同的行为时,POST比GET安全吗?
  • 为什么我仍然可以通过在URL中输入参数的PDO运行我的代码?我们不是将它们分别发送到服务器,然后在那里执行了吗?

1 个答案:

答案 0 :(得分:2)

  

现在我读到,如果我想获取敏感信息/将其上传到服务器,则应该使用POST

忘记敏感。您选择的HTTP方法实际上与安全性无关。唯一的事情是您的日志文件可能会在GET请求中记录查询字符串。

请参阅this answer,以了解更多信息。

  

可以正常访问脚本吗?

是的。为脚本提供公共URL的全部目的是公开提供信息。

  

为什么我仍然可以通过在URL中输入参数的PDO运行我的代码?

参数化查询的目的是防止SQL注入,在SQL注入中将特殊字符添加到数据中,以便运行除您要运行的查询以外的查询。有关更深入的说明,请参见Bobby Tables


如果您根本不想让人们运行您的查询,请不要给它提供公共URL。

如果要限制人们可以传入的值,请编写限制这些值的代码。

这可能涉及如下逻辑:

 If the user is not logged in:
      send them to the login page
 If the user does not own the comment they are trying to edit:
      throw an error message
 Otherwise:
      run the UPDATE query