何时以及如何使用此功能?

时间:2013-08-16 07:45:47

标签: php mysql security

我在php和mysql中有一个脚本,我希望保护其输入免受sql输入 我知道一些功能,但实际上不知道应该在何处以及如何使用它们 功能是:

nl2br()
preg_replace()
htmlspecialchars()
mysql_real_escape_string()
htmlentities()

我的意见是:

username
password
mobile
email
url
description (text area)

任何人都可以为我解释我该怎么做?

感谢

6 个答案:

答案 0 :(得分:2)

您必须使用名为mysqli的较新版本的mysql驱动程序,或者您可以使用PDO之类的替代

您可以将数据库与预准备语句结合使用。这是防御sql注入的唯一方法。因此,请花点时间选择其中一个课程并学习如何使用它们。

PS,

仍然sql注入不是你唯一需要担心的事情。有人可以在公共表单中添加一些JavaScript来隐藏页面或类似的东西。您可以使用它来过滤它们preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $var);,但这只是一个例子,还有很多东西要学习,只需看看PDO或mysqli并开始构建。

答案 1 :(得分:1)

在sql-injections上下文中唯一需要的函数是 mysql_real_escape_string()

但请记住,您应该使用mysqli_ *或PDO而不是mysql _ *

答案 2 :(得分:1)

使用

  

用htmlspecialchars()

在向用户显示数据之前。它将逃脱HTML符号。此功能可以防止XSS攻击。

使用

  

mysqli_real_escape_string()

将数据放入数据库之前。这将逃脱sql符号。这个会阻止SQL注入。

mysql被删除;改为使用mysqli扩展(在OOP风格中使用mysqli_real_escape_string()或mysqli :: real_escape_string())。

答案 3 :(得分:1)

nl2br() - 在字符串中的所有换行符之前插入HTML换行符。

 echo nl2br("foo isn't\n bar"); // Outputs: foo isn't<br />bar

preg_replace() - 使用正则表达式替换匹配的字符串。

preg_replace("/[^0-9]+/","",$string); //输出:仅返回任何字符串中的数字。

htmlspecialchars() - 将特殊字符转换为HTML实体。

echo htmlspecialchars("<a href='test'>Test</a>"); //&lt; a href ='test'&gt;测试&lt; / a&gt;

mysql_real_escape_string() - 转义字符串中的特殊字符,以便在SQL语句中使用。

htmlentities() - 将所有适用的字符转换为HTML实体。

 echo htmlentities($str);

$str = "A 'quote' is <b>bold</b>"; //输出:'引用'是&lt; b&gt;粗体&lt; / b&gt;

答案 4 :(得分:0)

针对SQL注入的第一条规则:使用预准备语句或参数化查询。不要将未选中的用户输入传递到任何SQL命令。您可以通过使用mysqli或PDO来实现这一点,但不要使用已弃用的mysql库,您应该不惜一切代价避免使用它。

答案 5 :(得分:0)

你的问题是更多人应该问的问题。

您应该应用的原则在计算机世界中由助记符 FIEO 所知。

过滤输入转义输出。

在互联网上搜索“PHP FIEO”将帮助您整理您的想法,然后将所有这些安全类型的功能放在FI或EO的一侧或另一侧。

当你读完它时,对这个问题的回复应该更有意义并帮助确定你需要哪些安全功能,哪些只是简化文本处理(即nl2br()等)

最初将花费几个小时,并帮助你在晚上睡觉,好吧,它无论如何都帮助我。祝你好运!