除了我列出的之外,还有什么其他技术可以防止SQL注入和XSS攻击



可能的重复:
防止PHP中SQL注入的最佳方法?

我正在创建一个新闻网站,我已经写下了实现安全所需的事项列表。

用户+站点交互

  1. 使用html实体净化所有POST/GET函数&mysql_real_sescape_string
  2. 如果站点即将联机,请关闭、报告错误或自定义它
  3. 我不使用cookie,只使用会话(因为会话不易受攻击)
  4. 关闭目录列表
  5. 制作robot.txt以防止索引不需要的文件
  6. 对于密码,请使用salt+Md5
  7. 只有通过获取ip和浏览信息,才能从一台PC和一个浏览器访问ADMIN站点,否则会出现404错误

我已经在我的网站上实现了所有这些。我知道你们中的大多数人会说使用PDO/Msqli来消毒,但我是PHP的初学者,很难学习PDO/Mysqli或OOP

所以,你能提供的任何其他东西都会很棒。谢谢

-->使用html实体清理所有POST/GET函数&mysql_real_sescape_string

为什么选择html实体?您只需要它们以html格式显示信息。在接收和存储信息时不要使用它。

另外:mysql_real_sescape_string仅适用于文本。如果你想接收一个整数,可以这样做:

$myInt = (int)$_POST["whatever"];

-->如果站点即将联机,请关闭、错误报告或自定义

是的,使用日志文件来存储它们,并定期进行查看。

-->我不使用cookie,只使用会话(因为会话不易受攻击)

如何在没有cookie的情况下转发PHPSSID?我希望不在url中。我猜你的意思是:我只使用cookie来存储PHPSSID。

安全性改进:为每个请求创建一个新的sessionid。

-->关闭目录列表

很好。

-->使robot.txt防止索引不需要的文件

好的,但敏感文件无论如何都不应该在webroot中(例如,数据库凭据)

-->对于密码,请使用salt+Md5

md5较弱。您可能需要研究单向加密的其他方法。

-->只有通过获取ip和浏览信息,才能从一台PC和一个浏览器访问ADMIN站点,否则会出现404错误。

这是个好主意。

还有很多东西需要补充。大部分与你的逻辑有关。

例如:如果你有一个userid的用户和一个postingid的帖子。你想在tblpostings中存储帖子,同时存储用户ID,这样你就知道是谁写的。现在,如果你允许删除帖子,你必须以某种方式检查删除帖子的人是否也是所有者。这类事情很难符合简单的一般规则。编写代码时请注意。:-)

我会小心robots.txt文件,因为尽管它们应该阻止机器人对某些比特进行索引,但它们也会告诉人们你不想让他们看你网站的比特。

不严格地说,PHP和XSS,但如果服务器在linux上,请禁用root ssh帐户,并使用另一个帐户。有特定于数据库的用户,所以如果其中一个数据库受到攻击,其他数据库就不会。

"对于密码,请使用salt+Md5">

比明文更好,但目前已知的最好的算法是bcrypt,并在这里描述:

如何使用bcrypt在PHP中哈希密码?

SQLInjection停止使用mysql_real_sescape_string,开始使用准备好的语句/参数化查询。现在就学习PDO,它并没有那么难,它将帮助你从一开始就把事情做好。

XSS查看输出的上下文转义。请参阅OWASP XSS预防备忘单。

登录时发出新会话。不要通过http泄露该会话。对登录用户使用https,并在会话cookie上设置安全和httpOnly标志。

使用bcrypt、scrypt或pbkdf2进行密码哈希。

正如其他人所说,不要将敏感文件放在未受保护的服务器上。对于黑客来说,Robots.txt是一个很好的起点。

最新更新