我最近开始使用AJAX和AngularJS进行编码,异步GET和POST请求使用PHP真的很酷!我遇到了一些我不确定是否非常重要的问题,但它们似乎确实很重要。
我有很多独立的PHP文件放在一个名为postRequests的目录中。这些文件接收在我的AJAX脚本中编码的post请求。我唯一的过滤是检查某某字段是数字,某某是字符串,等等,以及一个快速的"自定义卫生"功能:
function sanitize($string) {
return mysqli_real_escape_string($dbc, trim($string));
}
这些AJAX调用中的许多都非常简单,比如更新用户配置文件标准的链接,或者发送帖子评论数据的请求。然而,点击机器人可以很容易地向用户发送垃圾邮件,用户只需键入一些内容并向评论按钮发送垃圾邮件(尽管我在每次提交后都会清除文本区域)。
- 这是一个令人担忧的问题吗?我如何才能阻止用户在5秒钟后提交"hiowheeewr"评论文本
- 我应该用其他东西来保护我的用户输入数据吗
- 我曾考虑过使用HTTP身份验证,但如何存储密码?在我的AngularJS脚本的字符串中?这安全吗
此外,我的MySQL数据库凭据都存储在一个名为constants.php的文件中的字符串中(未加密),每当我连接数据库时都会引用该文件。这安全吗?
我应该如何存储这些管理员密码,这是我甚至应该担心的问题吗(点击机器人和密码存储)。有人发现我的PHP文件解析我的POST请求,向我的PHP文件发送POST请求,或者发现我的文件目录并读取PHP或JS脚本有多容易?
安全
第一个神奇的单词是Prepared Statements
。不需要mysqli_real_escape_string
。
使用准备好的语句,您可以将输入定义为输入。不可能,那时会发生mysql注入。
也永远不要相信用户的输入。如果你想要一个电话号码,为什么它应该有0-9,-,/,
以外的其他号码?
当然,如果我们谈论的是shell_execute
、eval
或类似的东西,你会需要更多的santization。那么,永远不要相信用户的输入是非常重要的。
垃圾邮件
我总是用蜜罐法来做。制作一个通过CSS
隐藏的链接。类似:/submit-very-important-data.php
如果这个页面被调用,你就知道它是由机器人程序调用的,你可以将它存储在SESSION
中。如果你的网站不够大,没有人会关心特定的机器人,只关心你的页面。
如果用户在你的页面上停留超过30秒(或类似的时间),也只接受评论。
如果这一切对你不起作用,你将需要一个captcha。
总之,SESSION
将是你的朋友。
身份验证
不知道AngularJS
,但如果用户已获得身份验证,为什么不存储在Session
中?