保护网站';s数据和打击垃圾邮件和点击机器人


Securing a site's data and combating spam and click bots

我最近开始使用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_executeeval或类似的东西,你会需要更多的santization。那么,永远不要相信用户的输入是非常重要的。

垃圾邮件

我总是用蜜罐法来做。制作一个通过CSS隐藏的链接。类似:/submit-very-important-data.php

如果这个页面被调用,你就知道它是由机器人程序调用的,你可以将它存储在SESSION中。如果你的网站不够大,没有人会关心特定的机器人,只关心你的页面。

如果用户在你的页面上停留超过30秒(或类似的时间),也只接受评论。

如果这一切对你不起作用,你将需要一个captcha。

总之,SESSION将是你的朋友。

身份验证

不知道AngularJS,但如果用户已获得身份验证,为什么不存储在Session中?