我对某事感到非常困惑,想知道是否有人可以解释。
在 PHP 中,我验证了用户输入,因此 htmlentitiies,mysql_real_escape_string 在插入数据库之前使用,而不是在所有内容上,因为我更喜欢使用正则表达式,尽管我发现它们很难使用。现在显然我将使用 mysql_real_escape_string 作为数据进入数据库,但不确定我是否应该仅在从数据库获取数据并将其显示在网页上时才使用 htmlentities(),因为这样做之前会改变一个人输入的数据没有保留它的原始形式,如果我以后想将该数据用于其他用途,这可能会导致问题。
例如,我有一个包含 3 个字段名称、主题和消息的留言簿。现在显然这些字段可以包含任何东西,比如 js 标签中的恶意代码基本上任何东西,现在让我感到困惑的是,假设我是一个恶意的人,我决定使用 js 标签和一些恶意 js 代码并提交表单,现在基本上我有恶意我的数据库中的无用数据。现在通过在将恶意代码输出到网页(留言簿)时使用 htmlentities 这不是问题,因为 htmlentities 已将其转换为安全的等价物,但同时我在数据库中有我宁愿没有的无用恶意代码。
因此,在说了所有这些之后,我的问题是我是否应该接受数据库中的某些数据可能是恶意的、无用的数据的事实,并且只要我在输出上使用 htmlentities 一切都会好起来的,还是我应该做其他事情呢?
我读了很多书,说在接收数据时过滤数据并在输出数据时对其进行转义,以便保留原始表单,但他们只给出示例,例如确保字段只是使用 php 等内置函数的 int,但我从未找到关于确保您希望用户键入他们想要的任何内容的留言簿之类的任何内容,以及如何将这些数据与 mysql_real_escape_string() 分开以确保它不会破坏数据库查询?
有人可以最终为我解决这个困惑并告诉我我应该做什么以及最佳实践是什么?
感谢任何可以解释的人。
干杯!