gpt4 book ai didi

php - 如何在 PHP 和 MySQL 的 textarea 中换行时避免 SQL 注入(inject)?

转载 作者:可可西里 更新时间:2023-11-01 08:08:59 25 4
gpt4 key购买 nike

我想要的是当用户在描述框中换行时,即:HTML 中的 textarea 然后所有数据都安全地存储在 SQL 数据库中,但是如果用户提供链接然后链接也变成文本,但是当用户在描述文本框中输入或换行时,它会保存在数据库中,而从数据库中检索时,换行符将再次显示。

<textarea name"description" id="description" rows="4" cols="50">
//In The text area the user enter the text. Here I want if user gives html links then links becomes text and if user give line break then line break store in the database and I can get back as it is how user submitted the form. Also I want to store data securely for avoiding sql injection but dont have the exact idea how to do it.
</textarea>

$text = $_POST['description'];
$text = htmlentities($text); // Here I want to remove html entities for avoiding sql injection
$text = mynl2br($text);
// Now Fire Insert Query All the data save but while retrieving the data I am not able to get line break and turning links to the text.


function mynl2br($text) {
return strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />'));
}

这就是我正在做的,但链接仍然是链接,当我检索文本时,显示的文本没有换行符。一行或一段中的所有文本。

请指出我在上面的代码中做错了什么。以及如何避免 sql 注入(inject)并安全地存储和检索数据。

最佳答案

要保留新行,您必须保留原始换行符,如果替换它们,您要么必须将它们替换回去,要么必须仅在页面上显示文本时(推荐)使用 nl2br,而不是在存储或检索它之前用于编辑。

同样适用于链接,在存储之前不要更改它们,只有在页面上显示时才替换它,这样你再次编辑它就不会有问题,你可以随时修改链接生成,因为你不'存储结果但不存储原始数据。

为避免 SQL 注入(inject),您不想使用这些魔术函数(htmlentities、strip_tags、magic_quotes 等 - 有很多,但没有一个是完美的) - 最好的解决方案是使用准备好的语句: https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.prepared-statements.html

它通过为值提供占位符来解决问题,这样用户输入就无法修改查询。

关于php - 如何在 PHP 和 MySQL 的 textarea 中换行时避免 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com