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

时间:2012-10-03 10:41:04

标签: php xss sql-injection

  

可能重复:
  Best way to prevent SQL injection in PHP?

我正在创建一个新闻网站,我已经写下了实现安全性所需的一系列清单。

用户+网站互动

  1. 使用html-entities&amp ;;清理所有POST / GET函数mysql_real_escape_string
  2. 如果网站即将在线,关闭,错误报告或自定义
  3. 我不使用cookies,只使用会话(因为会话不那么脆弱)
  4. 关闭目录列表
  5. 制作robot.txt以防止索引不需要的文件
  6. 对于密码,请使用salt + Md5
  7. 只能通过获取IP,从一台PC和一个浏览器访问ADMIN站点,并浏览信息,否则将引入404错误。
  8. 我已经在我的网站中实现了所有这些功能。我知道大多数人会说使用PDO / Msqli进行消毒,但我是PHP的初学者,我很难学习PDO / Mysqli或OOP

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

4 个答案:

答案 0 :(得分:2)

- >使用html-entities&amp ;;清理所有POST / GET功能mysql_real_escape_string

为什么是HTML实体?您只需要它们以html格式显示信息。接收和存储信息时请勿使用它。

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

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

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

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

- >我不使用cookie,只使用会话(因为会话不那么脆弱)

如何在没有Cookie的情况下转发PHPSESSID?我希望不在网址中。我想你的意思是:我只用cookie来存储PHPSESSID。

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

- >关闭目录列表

好。

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

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

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

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

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

这是一个好主意。

还有很多要补充的内容。大多数都与你的逻辑有关。

例如:如果您的用户拥有用户ID,并使用postsid发帖。您希望在tblpostings中存储帖子,同时存储用户ID,以便您知道是谁写的。 现在,如果您启用了帖子删除,则必须以某种方式检查删除帖子的人是否也是所有者。 这些东西很难适应简单的一般规则。编写代码时要注意。 : - )

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

How do you use bcrypt for hashing passwords in PHP?

答案 3 :(得分:0)

SQL注入攻击 停止使用mysql_real_escape_string并开始使用预准备语句/参数化查询。现在学习PDO,它并不难,并且会帮助你从一开始就把事情做好。

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

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

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

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