这期内容当中小编将会给大家带来有关网站是怎么防范SQL注入,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
目前创新互联已为成百上千家的企业提供了网站建设、域名、虚拟主机、网站改版维护、企业网站设计、景泰网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
我们知道现在大部分网站的数据库都是用的MySQL,当网站出现如下方这样的表单的时候,表单需要将数据录入数据库,但如果有个人非常熟悉MYSQL的语句,并且知道了表单的名称(和列名称),网站的拥有者并不注意这些的时候,那么他就可以轻松地注入。
如我的这个页面中这个语句,就是非常容易收到攻击的例子。
为了方便解释,我们把它简化一下:
mysqli_query($conn,"insert into XXXX(pick_name) values ('$_POST[pickName]')");
我们知道,它是将表单传过来的 pickName(对应表单中的 拾物名称*) 参数传递到数据库内的XXXX中的pick_name列里
但如果“用户”知道我们的表单名称,它输入:value');Delect from XXXX;--
如此,整个语句变成了:
mysqli_query($conn,"insert into XXXX(pick_name) values ('value');Delect from XXXX;--')");
那么恭喜你,XXXX这个表就消失了。
于是如果我敢这么输入的话,我也把自己的网站黑了。
又比如php手册中这个可怕的例子(MSSQL):
攻击数据库所在主机的操作系统(MSSQL Server)
$query = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);
?>
如果攻击提交 a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- 作为变量 $prod的值,那么 $query 将会变成
$query = "SELECT * FROM products
WHERE id LIKE '%a%'
exec master..xp_cmdshell 'net user test testpass /ADD'--";
$result = mssql_query($query);
?>
MSSQL服务器会执行SQL的这条语句,添加了一个用户,如此攻击者将有可能获得一个账号访问主机。
从上面大家也可以看到,SQL注入的关键就在于能否知道表的名称,如果你还想弄一些小玩意儿,那你还得知道列名。这里和我们的题目无关就不再多讲了。接下来讲一下如何防范SQL注入。
常用的防范措施有两种,一种是预处理语句、还有一种就是参数化查询,这里我们讲预处理语句。
$stmt = $conn->prepare('SELECT * FROM XXXX WHERE name = ?');
$stmt->bind_param('s', $name);
$stmt->execute();
bind_param就是将$name变量捆绑进入?中.'s'的意思是$name所对应的变量必须是一个字符串,这样我们就固定了它必须是一个字符串,它不能转化为命令。从而使得SQL注入无效。
上述就是小编为大家分享的网站是怎么防范SQL注入了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款