0

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

我正在创建一个新闻站点,并且我已经写下了实现安全所需的清单。

用户+站点交互

  1. 使用 html-entities 和 mysql_real_escape_string 清理所有 POST/GET 函数
  2. 如果网站即将上线,请关闭、错误报告或自定义
  3. 我不使用 cookie,只使用会话(因为会话不太容易受到攻击)
  4. 关闭目录列表
  5. 制作robot.txt 以防止索引不需要的文件
  6. 对于密码,使用 salt + Md5
  7. 仅通过获取 ip 和浏览信息使 ADMIN 站点可以从一台 PC 和一个浏览器访问,否则会引发 404 错误。

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

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

4

4 回答 4

2

--> 使用 html-entities 和 mysql_real_escape_string 清理所有 POST/GET 函数

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

另外: mysql_real_escape_string 仅适用于文本。如果您想接收一个整数,请执行以下操作:

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

--> 如果网站即将上线,关闭,报错或自定义

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

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

您如何在没有 cookie 的情况下中继 PHPSESSID?我希望不在网址中。我猜你的意思是:我只使用 cookie 来存储 PHPSESSID。

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

--> 关闭目录列表

好的。

--> 制作robot.txt 以防止索引不需要的文件

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

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

md5很弱。您可能想研究其他方式进行单向加密。

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

那是一个好主意。

还有很多要补充的。大多数与您的逻辑有关。

例如:如果您的用户具有用户 ID,并且帖子具有发布 ID。您想将帖子存储在 tblpostings 中,同时存储用户 ID,这样您就知道是谁写的了。现在,如果您启用删除帖子,您必须以某种方式检查删除帖子的人是否也是所有者。这些事情很难适应简单的一般规则。编写代码时请注意。:-)

于 2012-10-03T10:54:25.010 回答
1

我会小心 robots.txt 文件,因为虽然它们应该阻止机器人索引某些位,但它们也会告诉人们您不希望他们查看的站点的部分。

不严格,PHP 和 XSS,但如果服务器在 linux 上,请禁用 root ssh 帐户并使用另一个。拥有特定于数据库的用户,因此如果一个用户受到威胁,其他数据库则不会。

于 2012-10-03T10:50:15.867 回答
1

“对于密码,使用 salt + Md5”

比明文更好,但目前最著名的算法是 bcrypt,并在此处描述:

如何在 PHP 中使用 bcrypt 对密码进行哈希处理?

于 2012-10-03T10:59:26.990 回答
0

SQLInjection 停止使用 mysql_real_escape_string 并开始使用准备好的语句/参数化查询。现在学习 PDO,它并不难,而且会帮助你从一开始就做好。

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

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

使用 bcrypt、scrypt 或 pbkdf2 进行密码散列。

正如其他人所说,不要将敏感文件放在不受保护的服务器上。Robots.txt 是黑客入门的好地方。

于 2012-10-04T05:39:15.430 回答