如何使 <textarea> 仅将撇号识别为文本? [关闭]

Posted

技术标签:

【中文标题】如何使 <textarea> 仅将撇号识别为文本? [关闭]【英文标题】:How do I make <textarea> recognize apostrophes as text only? [closed] 【发布时间】:2015-09-22 12:16:39 【问题描述】:

很简单,我网站上的“texarea”就像发短信一样,它允许用户输入文本并将其发布到页面上。我刚刚发现它将文本视为某种代码,可能是 SQL。

当我输入“你好,我们都很好”时,“我们是”这个词中的撇号引起了一些混乱。

浏览器中显示的错误信息:

Error: You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near 're all set')' at line 1

以防万一您想知道,这里是 html

<form action="comi.php" method="post">
        <textarea maxlength="227" type="text" name="input" cols="45" rows="4"></textarea>
        <input type="submit" value="POST" id="button" />
</form>

我认为可能与数据库有关,有人可以帮忙吗?

提前致谢:)

【问题讨论】:

对不起,第一行应该说:“很简单,我网站上的 How can I prevent SQL-injection in PHP? 的可能重复项 我还是不明白,我以为有一个简单的解决方案 解决方法是不要在SQL语句中使用任何用户输入而不进行转义。这必须在服务器端完成,因为您不能信任客户端。见bobby-tables.com。问题不仅在于 SQL 语句,还在于来自用户的所有内容。我建议您在开始任何严肃的 Web 开发之前了解各种攻击,例如 XSS、CSRF、SQL 注入……否则您的服务器和客户端都处于危险之中。 啊,小希特勒认为这不是一个好问题。在我(和其他人一样)看来,它是可验证的,确实包含足够的信息,并且期望的行为是显而易见的......不要失败! :-) 【参考方案1】:

为了防止 SQL 注入,您应该使用Stored Procedures。

CREATE PROCEDURE saveText
    @textArea nvarchar(50)
AS 
SET NOCOUNT ON;

INSERT INTO myTable 
    (textArea)
VALUES
    (@textArea)

这样,当您的输入中有 ' 时,您不会有任何问题。

【讨论】:

【参考方案2】:

您需要对您输入的字符串进行转义,以免 sql 引擎混淆。

$input = $_POST["textarea"];
$safe_input = mysql_real_escape_string($input);

你需要在你的 sql 语句中使用这个。

警告

正如其他人试图告诉您的那样,您让自己容易受到 sql 注入 攻击。完成上述工作后,您应该阅读它。上面的cmets中有一个链接。

【讨论】:

【参考方案3】:

$input = $_POST["textarea"]; $safe_input = 添加斜杠($input);

【讨论】:

不不不,这不会保护任何东西

以上是关于如何使 <textarea> 仅将撇号识别为文本? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何制作适合当前视口宽度的 <textarea> ?

如何使 Django 管理员只读 textarea 字段

通过点击“Enter”从textarea提交数据

textarea 如何设置滚动条

使撇号在 perldoc 中正确呈现

如何使用c ++从字符串的末尾删除撇号