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

时间:2011-04-21 18:10:29

标签: php mysql security sql-injection

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

4 个答案:

答案 0 :(得分:5)

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

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

在更改服务器上的任何内容(数据库或服务器文件)之前,请检查请求是POST还是PUT或DELETE(

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

在处理之前验证输入

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

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

出于查询目的,转义输入,如果您使用输入直接打印到输出,则剥去斜线并对其进行消毒。

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

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

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

由于Ankur建议在您没有登录会话时使用访问令牌。但这不可靠。

答案 1 :(得分:4)

你永远不应该假设来自GET或POST的信息被正确转义,即使你在你的网站上进行验证,也可以禁用javascript并且可以手动编码请求以进行SQL注入攻击。生成查询字符串时使用mysql_real_escape_string()

http://php.net/manual/en/function.mysql-real-escape-string.php

据我所知,快速阅读它, HTML Purifier 是解析WYSIWYG编辑器的输出,或者是您希望用户使用正确HTML的任何地方。它使您可以控制禁止和过滤掉某些内容(如脚本),并确保所有标记都已正确嵌套和关闭。如果您在从数据库读回数据后将HTML转储到页面中,这一点尤其重要。

答案 2 :(得分:3)

在将数据放入数据库之前,切勿将数据转换为表示格式;如果合适的话,清理它,但总是让数据库包含数据的“最新”形式。

在显示之前,始终将数据转换为演示文稿格式,除非确定数据不应被转义,并且不会逃脱它。

答案 3 :(得分:1)

这取决于你的价值观和来自哪里。简短而甜蜜的回答是:

ESCAPE AND SANITIZE

这意味着确保将所有字符串放在引号中并确保转义用户提交的字符串中的所有特殊字符。键入匹配和长度检查。

相关问题