我是编程领域的新手,我已经学习了很多关于使用HTML-AJAX-PHP-MySQL的基本CRUD类型的Web应用程序。我一直在学习编码作为一种爱好,因此只使用了WAMP / XAMP设置(localhost)。我现在想冒险使用VPS并学习如何设置它并最终开辟一个供公众使用的新项目。
我注意到每当我使用AJAX或甚至常规POST将表单数据发送到我的PHP文件时,如果我打开Chrome调试器并转到“网络”,我可以看到正在发送的数据,以及后端的数据正在发送数据的PHP文件。
如果用户可以看到这个,他们可以拦截这些数据,修改它,并将它发送到同一个后端PHP文件吗?如果他们创建自己的简单HTML页面并将POST数据发送到我的PHP后端文件,它会起作用吗?
如果是这样,我该如何避免这种情况?我一直在阅读使用HTTPS,但我仍然感到困惑。使用HTTPS意味着我必须以任何方式改变我的代码吗?
答案 0 :(得分:5)
浏览器显然会知道它正在发送什么数据,它将在调试器中显示它。 HTTPS加密传输中的数据,远程服务器将在收到后对其进行解密;即它可以防止中间的任何第三方能够读取或操纵数据。
这可能会让您感到震惊(或许不是),但与服务器的通信只能通过HTTP(S)进行。这是一个简单的文本协议。任何人都可以随时随地向您的服务器发送任意HTTP请求。 HTTPS加密与否。如果您担心有人操纵通过浏览器调试工具发送的数据......您的担忧完全是错误的。有许多更简单的方法可以将任意制作的HTTP请求发送到您的服务器,甚至无需访问您的站点。
您的服务器只能依赖它收到的数据,并且必须根据自己的优点严格验证给定的数据。试图以任何方式锁定客户端都是徒劳的。
答案 1 :(得分:4)
这比这更简单。 无论您是使用GET还是POST来传输参数,HTTP请求都会由用户的客户端发送到您的服务器,无论是Web浏览器,telnet还是其他任何东西。用户可以简单地知道这些POST参数是什么,因为它是发送它们的用户 - 无论用户是否参与该过程。
你从错误的一端解决问题。 编程最重要的规则之一是: 永远不要相信用户条目是编程的基本规则!用户可以 犯错误,其中一些会试图伤害你或窃取来自你 欢迎加入俱乐部。
因此,如果您收到的POST或GET参数不是您所期望的,无论是错误的还是恶意的意图,您都不得允许您的代码执行任何可能以任何方式损害您的操作。如果你的代码按照它设计的方式,只是通过向你的某个页面发送特定的POST值而使你容易受到伤害,那么你的设计是错误的,你应该重新考虑这个问题。
在设计程序时,这个问题是一个主要问题,你会发现大量有关如何防止代码反对你的文档,教程和提示。
别担心,这不是 难以处理,而且你自己提出这个问题的事实表明你有多善于解决问题,以及你是如何做出贡献的好的代码,你没理由失败。
如果您在接受安全更新时遇到特定问题,请随意发布其他问题。
答案 2 :(得分:0)
每个人都可以向您的申请发送他们想要的任何内容。 HTTPS只是意味着他们无法查看和操纵其他人发送给您的应用程序的内容。但是你总是必须假设发送给你的应用程序的内容是POST,GET,COOKIE或其他什么是邪恶的。
答案 3 :(得分:0)
HTTPS在传输中加密,因此无法解决此问题。
你不能相信任何客户端。通过webform发送的任何数据都可以设置为客户想要的任何数据。他们甚至不必拦截它。他们只需修改页面上的HTML即可。
没有办法解决这个问题。您可以而且应该进行客户端验证。但是,由于这通常只是JavaScript,因此可以修改/禁用它。
因此,您必须在收到数据服务器端时对其进行验证。数字应为数字,删除任何反斜杠或无效的特殊字符等。
答案 4 :(得分:0)
在HTTPS中,之前建立了TLS通道并传输了HTTP数据,因此从这个角度来看,GET和POST请求之间没有区别。
答案 5 :(得分:0)
它是加密的,但它只能用于防止mitm攻击。
你的php后端不知道它收到的数据来自何处,这就是为什么你必须假设它收到的任何数据直接来自黑客。
由于您无法防止发送令人讨厌的数据,因此您必须确保处理所有安全接收的数据。采取的一些步骤涉及确保无法执行上传的任何文件(即,如果有人上传了php文件而不是图像),确保收到的数据永远不会直接与数据库交互(即https://xkcd.com/327/),&确保您不会因为他们说他们以用户身份登录而信任某人。
进一步保护对收到的帖子数据进行一些研究,并查看最佳实践。