将代码片段插入数据库并在 textarea 中以相同方式显示

Posted

技术标签:

【中文标题】将代码片段插入数据库并在 textarea 中以相同方式显示【英文标题】:Insert code snippet into database and display it identically in textarea 【发布时间】:2017-11-09 03:58:35 【问题描述】:

我如何能够将 code sn-p 插入数据库,然后在 textarea 相同地显示该 code 到我插入它的时候。

在比较输入和输出的代码时,它们永远不会相同,由于某种原因我无法让它工作。

$db = new sqlite3('test.db');
$r = $db->query("select * from test where id='1'");
$f = $r->fetchArray();

echo "<textarea rows='10' style='width:500px;'>$f[data]</textarea>";
$db->close();

这是我正在测试的代码

't apple \n\r 

♦   &diams; &#9830; black (solid) diamond suit

<textarea></textarea>
$£%^&*()!@">RWH@£)"":?'
<form>dfddf
<input type="button">
</form>

如何将其正确插入数据库中以在 textarea 中以相同的方式显示数据?

【问题讨论】:

必须先输出编码数据再插入html,否则会被一些字符破坏,存在XSS安全风险。 嗨,eckes,谢谢您的回复,我如何对其进行编码?在将其插入数据库之前,如何将其解码为相同?没有像问题中那样执行或更改任何代码,代码在我插入时就在那里,我想实现它。 htmlentities() - php.net/manual/en/function.htmlentities.php 您在数据库中存储的字符串是什么? 嗨,Airerr,这行得通,它显示代码相同,谢谢 【参考方案1】:

强烈建议不要将代码存储在您的数据库中,这可能会导致一些非常严重的安全漏洞,但您可以在将代码添加到数据库时使用htmlentities()

请记住,这不会让您完全安全,但是,它至少会将标签更改为符号。

htmlentities — 将所有适用的字符转换为 HTML 实体

这将完成您将结果存储在数据库中所需的操作:

$string = '<h1>This is a Heading 1</h1>';

现在在运行sql 查询时,将htmlentities 函数与您的字符串一起添加:

htmlentities($string);

如果你打印出来,你会看到:

<h1>This is a Heading 1</h1>

代替:

这是标题 1

【讨论】:

嗨塞缪尔,我明白你在说什么,通过谷歌搜索编码,在将其传递到数据库之前使用 base64_encode 对其进行编码,然后使用 htmlentities(base64_decode( $f[data])) 来显示,如果我这样做了,那么安全漏洞会有多严重? 您需要关注多层次的风险,从数据库中提取数据通常风险较小,最大的问题是在数据库中存储数据时,请阅读以下内容了解更多信息: php.net/manual/en/security.database.sql-injection.php 如果您使用准备好的语句,则不需要对写入数据库的数据进行 base64 编码。我会将其未编码和未转义存储在数据库中以保持数据可移植性。 嗨 Samuel,我听到你在说什么,如果我使用 bindParam 准备 sql 会怎样?比如:php.net/manual/en/pdo.prepared-statements.php 并在数据上使用 htmlentities 然后插入数据,这样会更安全吗? 嗨,eckes,我重新创建了查询以使用prepared,我将sn-p放入db中并且它是相同的,它也同样执行javascript代码,所以一定是xss攻击你已经说过了,你说我应该把它存储为未编码和未转义的,这是否意味着我使用显示的 htmlentities 来阻止任何 xss 攻击?

以上是关于将代码片段插入数据库并在 textarea 中以相同方式显示的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 数据库中显示日期和价格,并在 PHP 中以各种格式显示

从 PHP 将 textarea 元素插入 MySQL

使用 jQuery 将元素写入 textarea

使用 JS 和 PHP 将 textarea 内容保存在文件中

将单元格数据复制到宏中以避免更新宏

您如何以编程方式将 Flex TextArea 的插入符号移到末尾?