如何从get/post获取信息并将信息保存到数据库中,今天的最佳实践是什么?数据是否仍然像过去一样逃脱或者还有其他做法?另外,HTMLPurifier在哪里可以适应?我目前正在使用它来过滤富文本。
回答
从不将数据从GET保存到数据库。
即使您正在进行足够的验证和转义,也永远不要从GET保存数据。 GET不应该改变服务器上的信息。
改变在服务器中的任何(DB或服务器中的文件)检查是否请求是POST或PUT或DELETE适用
POST之前应该更改服务器的状态。因此,在更新表格或更改服务器上的任何文件之前,请检查请求方法是否过帐。
处理
如果你期待一个整数验证输入之前验证输入确实是一个整数。使用的数据库查询或添加到输出
对于查询目的之前
逃逸逃逸输入输入和的情况下,使用的是输入到直接打印到输出然后剥离斜线和消毒它。对于POST
使用易腐令牌时,你有用户会话
使用访问令牌的权限如果你有用户登录和更新令牌每次访问或5分钟左右。
使用访问令牌,当你没有用户会话
由于ANKUR建议使用访问令牌,当你没有登录会话。但这不可靠。
使用$ _SERVER属性(如http_referrer)来检查是否仅从所需页面生成了帖子。 – 2011-04-21 18:26:12
但引用者可以伪造 – 2011-04-21 18:31:40
除此之外,您可以使用access_tokens作为另一种选择,无论用户何时打开表单页面,生成access_token并使用该标记创建数据库条目,使用访问标记创建隐藏字段。更新该行以防止用户提交表单,否则在一段时间后删除该行条目。 – 2011-04-21 18:32:49
那么这取决于你的价值观和他们来自哪里。在简短而亲切的回答是:
ESCAPE和消毒
这意味着确保你把所有的字符串中的报价,并确保你逃避用户提交的字符串的所有特殊字符。类型匹配和长度检查。
“将所有字符串放在引号中”是什么意思?你指的是什么特殊字符? – 2011-04-21 18:15:42
那么如果你有一个输入$ 1和sql语句'INSERT'。$ 1'。 INTO ... SQL注入可以通过$ 1 =')来实现; PHP最好的方法是使用准备好的语句,就像PDO – austinbv 2011-04-21 18:18:34
@austin那样,你需要*使用库的卫生功能(如'mysql_real_escape_string')。只需添加斜杠或引号即可产生安全漏洞。或者使用准备好的语句,正如你所说的 – 2011-04-21 18:22:32
在将数据放入数据库之前,切勿将数据转换为表示格式;在适当的时候对其进行清理,但始终让数据库包含“最快”的数据形式。
在显示之前,请务必将数据转换为演示文稿格式,除非确定不应该转义数据并且不可以转义数据。
嗨伊格纳西奥。当你说数据库应该包含最丰富的信息时,你如何保存富文本?我会补充说我使用过滤的html,因为一个共识是bbcode比它的价值更麻烦。 – 2011-04-21 18:26:15
如果过滤的HTML是你最喜欢的格式,那就这样吧。 – 2011-04-21 18:28:37
为什么不逃生? – austinbv 2011-04-21 18:33:23
即使您在您的网站上进行了验证,您也绝不应该假设来自GET或POST的信息能够正确转义,javascript可以被禁用,并且可以手动编写请求以执行SQL注入攻击。生成查询字符串时使用mysql_real_escape_string()
。
http://php.net/manual/en/function.mysql-real-escape-string.php
据我可以从它迅速地读了出来,HTML过滤是从所见即所得的编辑器或任何地方你从用户期待适当的HTML解析输出。它允许您控制禁止和过滤某些事物(如脚本),并确保所有标记都正确嵌套和关闭。从数据库中读取数据后,将HTML转储到页面中尤其重要。
那么,那就是他正在使用'mysql _()'函数族。 – 2011-04-21 18:21:14
@Pekka - 嗯......真......这篇文章是用mysql标记的,所以我可能会说得对。 – DarthJDG 2011-04-21 18:25:24
@Pekka @DarthJDG:我不确定,但我是这么认为的。正在使用某种数据库类。另外,HTMLPurifier本身还不够。这只是一个额外的层,以避免跨站点攻击等事情。 – 2011-04-21 19:03:41
- 1. 将CreditCard信息存储到数据库中的最佳做法
- 2. 从窗体获取信息到控制器并将其保存在数据库中
- 3. Facebook - JavaScript SDK并将用户信息保存到数据库
- 4. 获取天蓝色的死亡信息并保存到宇宙数据库中
- 5. 将数据保存到数据库并使用PHP获取
- 6. 从会话中获取值并将其保存到数据库ASP.NET
- 7. 如何从TinyMCE中获取文本并将其保存到数据库中
- 8. 无法将信息保存到数据库 - UNC共享问题?
- 9. 无法将信息保存到数据库
- 10. Django - 将Facebook信息从社会登记保存到数据库
- 11. 从SQL数据库获取信息并获取登录错误
- 12. 我可以使用webservice.vb从gprs获取信息并将信息存储到数据库中吗?
- 13. 从PDF中提取文本并将其保存到数据库 - 保留间距
- 14. 如何从获取值并保存到php的数据库
- 15. 从SQL Server数据库获取信息
- 16. 从数据库sqlite中获取信息
- 17. 从Mysql数据库获取信息
- 18. perl从selectrow_array获取数据库信息
- 19. 从数据库中获取信息
- 20. 无法将信息从表单存储到数据库中
- 21. 将撤消和重做信息存储到数据库?
- 22. 如何获取Facebook用户的信息并将其插入数据库?
- 23. 在asp.net中保存文件并将信息保存在数据库中
- 24. 将facebook用户的详细信息保存到数据库
- 25. 如何将数据库信息保存到android中的文件?
- 26. Javascript,将用户的详细信息保存到数据库
- 27. 如何将Facebook私人信息保存到数据库?
- 28. 如何获取数据与改造并保存到数据库
- 29. 从MySql Query获取信息并将其放入PHP数组中
- 30. 在jquery回调后将信息保存到数据库
这一切都取决于你将要对数据做什么。这取决于用什么样的逃避需求来完成它。你能添加一些上下文吗? – 2011-04-21 18:12:32
嗨Pekka。大部分数据将被保存并随后显示。这是一个社交网站。 – 2011-04-21 18:14:28