有人可以将数据发布到我的PHP脚本吗?

时间:2018-02-01 01:16:20

标签: php ajax

我对PHP以及互联网的理解非常有限。我想知道是否有人可以简单地向我的PHP脚本发送POST请求(假设它是公开的)。不会有可能弄乱我的整个剧本吗?

2 个答案:

答案 0 :(得分:3)

答案:是的。

结束。

我认为这个问题来自一些没有措辞的安全问题。

首先,知道您可以使用$_SERVER['REQUEST_METHOD']检查请求方法(a.k.a HTTP动词)。

其次,您可以从浏览器或任何请求方法的其他软件向任何公共服务器发送HTTP请求(读取:在网络上可访问)。是的,除了PHP中的GET和POST之外,您还可以处理其他事情。

我发现浏览器扩展程序“Requestly”对测试非常有用。

您可能对Cross-Site Request ForgeryCross-Site Scripting感兴趣。

让我们谈谈缓解......

应该很明显......但是:验证所有输入。不要相信输入来自您自己网站的用户。

验证后,可能需要进行卫生步骤。例如,如果要显示从请求到用户的值,请清理输入,使其不包含HTML代码。通过这样做,您可以阻止攻击者在您的页面中注入潜在危险的代码(作为典型示例,注入javascript)。

然而,您可能也知道这一点:使用预备语句。如果要将从请求中获取的数据发送到数据库,则使用预准备语句将保护您免受SQL注入。

是的,我知道问题不是关于javascript或SQL注入。但是,根据OWASP TOP 10,注入提醒最常见的漏洞,并且想知道第三方是否可以向其页面发出请求的人是那种需要被告知这一点的人。

好的,接下来,您需要知道请求是否来自经过身份验证的用户。同样,你可能已经这样做,使用会话。您可能不知道的是,PHP会话cookie默认情况下不是HTTP,这意味着它可能在客户端被盗(请参阅Session Hijacking)。要解决此问题,请使用ini_set('session.cookie_httponly', 1);

现在,当然,cookie可能会从Man In the Middle攻击中被盗,这会让我:使用HTTPS。您可以从Let's Encrypt获得免费的SSL证书以在您的托管中设置HTTPS,如果您是新手,我建议使用ZeroSSL这样可以轻松获取证书并使用后面的Let's Encrypt场景。

最后,在某些情况下,您需要确保请求不是来自labius方,并且您不能依赖于正在打开的会话。在这种情况下,您需要发出与特定操作关联的令牌,并且只有在呈现令牌时才允许操作继续...例如,如果用户想要recover access (forgot password),您可以发送带有令牌到他们的电子邮件帐户,如果出现电子邮件(并且可选择解析验证码),则允许用户设置新密码。

我希望我不需要告诉你How NOT to Store Passwords!

有关详细信息,请参阅OWASP Cross-Site Request Forgery Prevention Cheat Sheet

答案 1 :(得分:0)

  

我想知道是否有人可以简单地向我的PHP脚本发送POST请求(假设它是公开的)。

是的,但如果您未允许XHR,则不能通过现代浏览器中的fetch / CORS。 (这不会阻止在您的脚本上发布的另一个网页上的常规form。)

  

这不会有可能弄乱我的整个剧本吗?

怎么样?您有责任妥善处理发布给您的任何内容。