从$ _GET/$ _ POST获取信息并将其保存到数据库的实践?

Jam*_* P. 1 php mysql security sql-injection

当从获取/发布信息并将信息保存到数据库时,今天的最佳实践是什么?数据是否仍然像过去那样被转义,或者是否有其他做法?此外,HTMLPurifier在哪里可以适应?我目前正在使用它来过滤富文本.

Ash*_*ane 5

永远不要将数据从GET保存到数据库.

永远不会从GET中保存数据,即使您正在进行充分的验证和转义.GET不应该更改服务器上的信息.

在更改服务器(DB或服务器文件)上的任何内容之前,请检查请求是POST还是PUT或DELETE(如果适用)

POST应该改变服务器的状态.因此,在更新表或更改服务器上的任何文件之前,请检查请求方法是否发布.

在处理之前验证输入

如果您期望整数验证输入确实是整数.

在db查询中使用或添加到输出之前转义输入

出于查询目的,转义输入,如果您使用输入直接打印到输出,则剥去斜线并清理它.

当您拥有用户会话权限时,请使用易腐性令牌进行POST

如果您有用户登录并使用访问令牌,则每次访问或5分钟左右更新令牌.

没有用户会话时使用访问令牌

正如Ankur建议在没有登录会话时使用访问令牌.但这不可靠.

  • 使用$ _SERVER属性(如http_referrer)来交叉检查是否仅从所需页面生成帖子. (3认同)
  • 但是引用者可能是伪造的 (3认同)
  • @ankur使用HTTP_REFERER进行任何类型的真实性检查是非常危险的,它可以由客户端自由操作 (2认同)