我在php和mysql中有一个脚本,我希望保护其输入免受sql输入 我知道一些功能,但实际上不知道应该在何处以及如何使用它们 功能是:
nl2br()
preg_replace()
htmlspecialchars()
mysql_real_escape_string()
htmlentities()
我的意见是:
username
password
mobile
email
url
description (text area)
任何人都可以为我解释我该怎么做?
感谢
答案 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()
等)
最初将花费几个小时,并帮助你在晚上睡觉,好吧,它无论如何都帮助我。祝你好运!