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

PHP:关于公共URL和查询的初学者问题,php,Php,我已经开始学习PHP,有一个问题我似乎不明白 例如,我在URL上有一个PHP脚本: 如果此脚本有一个需要用户(从GET)提供参数的查询,那么我可以像这样轻松地执行它: 其中查询可以是 从UID=2的用户中选择* 现在我读到,如果我想获取敏感信息/上传到服务器,我应该使用POST,但即使我使用POST,我仍然可以在Postman中使用参数执行同样的操作,并且查询仍然会执行 我阅读了有关SQL注入的内容,发现PDO很有用,因为它将查询与数据分开发送到服务器 我已经用PDO重写了第一个查询,但是我仍

我已经开始学习PHP,有一个问题我似乎不明白

例如,我在URL上有一个PHP脚本:

如果此脚本有一个需要用户(从GET)提供参数的查询,那么我可以像这样轻松地执行它:

其中查询可以是

从UID=2的用户中选择*

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

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

我已经用PDO重写了第一个查询,但是我仍然可以用URL执行它。我做错了什么?我是不是误解了什么

问题:

  • 公开访问脚本是否正常?因为我觉得这很不安全
  • 当我可以在《邮递员》中重现同样的行为时,POST如何比GET更安全
  • 为什么我仍然可以使用PDO运行代码,并在URL中输入参数?我们将它们分别发送到服务器,然后在那里执行,这不是重点吗
现在我读到,如果我想获取敏感信息/上传到服务器,我应该使用POST

忘掉敏感。在您选择的HTTP方法中,几乎没有任何与安全相关的内容。唯一的问题是日志文件可能会在GET请求中记录查询字符串

请参阅以获取进一步阅读

公开访问脚本是否正常

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

为什么我仍然可以使用PDO运行代码,并在URL中输入参数

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


如果你根本不想让别人运行你的查询,就不要给它一个公共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

2
是与安全相关的秘密吗?为什么?不,PDO不知道你的意思。它可以保护您免受SQL注入的影响,这是它工作的一部分。它不知道一个值来自何处,也不知道
2
应该是秘密还是什么。太多了。避免问多个问题。听起来你需要一位导师或老师。那么插入是如何工作的呢?我无法想象拥有一个网址.com/register.php?name=xy&password=123真的是安全的,这样每个拥有URL的人都可以将内容插入数据库?@GáborMicskó-你希望人们将数据插入数据库。这就是他们创建帐户的方式。当人们做了你不想让他们做的事情时,就会出现安全问题。@Murilo-这无助于解决他们提出的问题。@Gábor也许这里的一个基本误解是前端和后端的角色……你的服务器只响应HTTP请求。总是。它就是这样做的。HTTP请求不是“安全的”或诸如此类的,HTTP请求只是安全的。任何人都可以随时向您的服务器发送包含任何数据的HTTP请求。由服务器/代码决定请求是否允许/有效/合理。发送一个包含信息的请求不是问题,你的服务器是否在处理它。我想我现在明白了!谢谢各位