如何使 <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> 仅将撇号识别为文本? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章