我已经开始研究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来执行它。我在这里做错了什么?我误会了吗?
问题:
答案 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