现在的位置: 首页 > web前端 > 正文

网站如何防止sql注入

2020年07月20日 web前端 ⁄ 共 1038字 ⁄ 字号 评论关闭

  防sql注入,是一种网站防止黑客攻击的方式。网站要怎么防范最最常见SQL注入式攻击呢,我们先从SQL注入式攻击的原理来说起。


  1.没有正确过滤特殊字符不能防止sql注入


  例如单引号和分号如果你的sql语句是这样,又没过滤“’”单引号:"SELECT*FROMtablesWHEREparam='"+RequestString+"';"攻击者将用户名变量(即RequestString)设置为:a'or't'='t


  此时原始语句发生了变化:SELECT*FROMtablesWHEREparam='a'OR't'='t';


  如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。这种方式是跳过身份认证的最简单手段


  再配合“;”分号可以进行更多的SQL注入攻击";"分号用来执行多个语句。下面语句中的RequestString的值将会导致删除“tables”表,又可以从“dataTables”表中选择所有的数据(实际上就是透露了每一个用户的信息)。a';DROPTABLEtables;SELECT*FROMdataTablesWHEREparamLIKE'%


  这就将最终的SQL语句变成下面这个样子:SELECT*FROMtablesWHEREparam='a';DROPTABLEtables;SELECT*FROMdataTablesWHEREparamLIKE'%';


  通过这种原理可以执行很多很多攻击了。


  2.不正确处理变量类型不能防止sql注入


  如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。


  例如:“SELECT*FROMtablesWHEREid="+RequestID+";"


  从这个语句可以看出,作者希望RequestID是一个数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。例如,将RequestID设置为1;DROPTABLEtables就不需要上面说的“‘”单引号了,照样可以进行攻击:会将“tables”表从数据库中删除,SQL语句变成:SELECT*FROMDATAWHEREid=1;DROPTABLEusers。


  总之,网站遭受SQL注入式攻击的基本原理,给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.