我对某事感到很困惑,并在想如果有人能解释。验证用户输入?
在PHP中,我验证用户输入,所以htmlentitiies,mysql_real_escape_string在插入数据库之前使用,而不是一切,因为我喜欢使用正则表达式虽然我可以尽管我发现它们很难使用。现在很明显我会使用mysql_real_escape_string作为数据进入数据库,但不知道应该使用htmlentities()只有当从数据库获取数据并在网页上显示它时,才会手动更改由某人输入的数据不保留它的原始形式,这可能会导致问题,如果我想稍后使用该数据用于其他事情。
因此,例如,我有一个留言簿3字段的名称,主题和消息。现在显然这些字段可以包含任何类似js标记中的恶意代码基本上任何东西,现在让我困惑的是让我说我是一个恶意的人,我决定使用js标记和一些恶意代码并提交表单,现在基本上我有恶意无用的数据在我的数据库中。现在,在将恶意代码输出到网页(留言簿)时使用htmlentities并不是问题,因为htmlentities已将其转换为安全等效形式,但同时我在数据库中没有无用的恶意代码,我宁愿没有这些代码。
所以说完所有这些之后,我的问题是我应该接受一个事实,即数据库中的某些数据可能是恶意的,无用的数据,只要我在输出上使用htmlentities,一切都会好起来的,还是应该做其他事情? 。
我读了很多关于过滤接收到数据的书籍,并在输出时将其转义出来,以便保留原始形式,但他们只是提供了一些例子,例如确保字段仅仅是使用已内置于php等中的函数的int类型,但是我从来没有发现任何关于确保类似于留言簿的地方,您希望用户输入他们想要的任何内容,而且还会如何从mysql_real_escape_string()中过滤这些数据以确保它不会中断数据库查询?
难道有人请最后关闭这个困惑,告诉我我应该做什么以及最佳做法是什么?
感谢任何能解释的人。
干杯!
哇,谢谢Marc B,从来不知道我会得到如此快速的回复。感谢您的输入,我将检查该链接,但也已清除所有内容。谢天谢地,我的网站非常小,所以不用担心,但至少我现在可以在需要的地方更改我的代码,并且基本上做了我认为我需要做的事情,因为您的确认以及我现在感到自信,我现在在仪式轨道上:) 显然,如果其他人想要添加任何其他建议,请做。 PS:很棒的网站希望我发现它很久以前,只是注册:) – PHPLOVER 2010-09-03 18:43:00
从事数据安全性和完整性工作永远不会太早。实际上没有那么多,但是你越早养成将外部来自有毒废物的东西处理的习惯越好。作为附加的安全层,您可能希望使用PDO进行调查并准备好语句,除非您必须构建不符合其范围的查询。 – 2010-09-03 19:05:02
感谢Marc和其他人一样,真的已经回答了我所有的问题多,我从做这个帖子学到配发及心情放松现在至少:) 你们都得到了很大的帮助,这么说感谢大家。 – PHPLOVER 2010-09-03 20:26:57