举世闻名的 SQL 注入是什么?这个漫画告诉你( 二 )


使用正则表达式等字符串过滤手段限制数据项的格式、字符数目等也是一种很好的防护措施 。理论上,只要避免数据项中存在引号、分号等特殊字符就能很大程度上避免 SQL注入 的发生 。
另外,就是使用各类程序文档所推荐的数据库操作方式来执行数据项的查询与写入操作,比如在上述的案例中,如果我们稍加修改,首先使用execute方法来保证每次执行仅能执行一条语句,然后将数据项以参数的方式与SQL执行语句分离开来,就可以完全避免 SQL注入 的问题,如下SQL数据库反注入示例 。
conn= sqlite3.connect( 'test.db')
以安全方式插入包含注入代码的信息:
name = "Robert'); DROPTABLEstudents; --"
【举世闻名的 SQL 注入是什么?这个漫画告诉你】query = " INSERTINTOstudents ( name) VALUES(?) "
conn.execute(query, [name])
检视已有的学生信息:
cursor= conn. execute( "SELECT id, name from students")
print( 'IDName')
forrow in cursor:
print( '{0}{1}'.format(row[ 0], row[ 1]))
conn. close
而对于php而言,则可以通过MySQL_real_escape_string等方法对SQL关键字进行转义,必要时审查数据项目是否安全来防治 SQL注入。
当然,做好数据库的备份,同时对敏感内容进行加密永远是最重要的 。某些安全性问题可能永远不会有完美的解决方案,只有我们做好最基本的防护措施,才能在发生问题的时候亡羊补牢,保证最小程度的损失 。




推荐阅读