php - 将值转义到数据库中或之后

标签 php mysql pdo escaping xss

正确的转义方法是什么?

我有一个基本的注册表、用户名和密码,例如。我使用 PDO 通过 php 脚本(一切都在 php 中)将这些值保存到数据库,因此不可能有 SQL 注入(inject)(我希望,如果有更安全的方法来做到这一点,请告诉我)。 我的问题是,我应该在将用户名值保存到数据库之前对其进行转义吗?所以如果有人尝试这样做

<script>alert("hi")</script>

它会保存这样的东西

&lt;script&gt;alert(&quot;hi&quot;)&lt;/script&gt;

进入数据库。之后就不应该有 XSS 了(是的,有点天真的说法,但我不知道还能怎么说)。或者保存纯文本

<script>alert("hi")</script>

进入数据库,然后我想在某个地方打印这些值来转义它们?

在我看来,更安全的方法是在保存到数据库事件中进行转义,因此将转义值放入数据库中,然后打印它们。但我猜我的问题是,每当我想打印它们时,我是否应该再次对数据库中的转义值使用转义函数?或者直接按原样打印它们(应该转义)。我不喜欢第一个“解决方案”,因为

<script>alert("hi")</script>

将在浏览器中呈现为转义,但不仅仅是像&lt;这样的安全字符 而第二种解决方案似乎是,如果我一旦搞砸了,我就注定失败了。

最佳答案

经验法则:如果用户稍后能够编辑其输入,则将其保存在未转义的数据库中。

否则在写入数据库之前转义以保存每个输出的处理步骤。

关于php - 将值转义到数据库中或之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22621809/

相关文章:

cron - 使用 CronJOb 备份 MySQL

php - 在一张 table 上选择不同的作品,但在另一张 table 上不选择不同的作品

php - 设置输入值而不是让用户输入

php - 带 pdo 和 mysql 的动态多级 Bootstrap 菜单

php - SEO - 无法访问的页面

php - PDO 选择 [和 - 或]

PHP 绑定(bind) PDO 数组

php - 使用 PHP 和 MySQL 从数据库获取数据时无法避免重复数据

Mysql NodeJS 拒绝对重复数据库的声音查询

mysql - SQL 在 1 个表中选择 2 个条目