statement主要用于执行静态的SQL语句。preparestatement用于执行动态sql语句,效率很高,并且还能防止SQL注入。
关于SQL漏洞。
例如:sql = "select * from 用户表 where 姓名=' "+name+" ' and 密码= ' "+password+" ' ";
name和password放用户输入的用户名和口令。通过执行上述sql句子判断帐号密码是否合法。但是这种方法存在一种致命的漏洞。
如果在用户名称中输入字符串: 123 'or' 1=1,然后密码随便输什么,如aaa。变量替换之后。sql语句就变成了:
sql = "select * from 用户表 where 姓名 = '111' or '1=1' and 密码='aaa';
当select语句在查询判断条件的时候,遇到or操作就会忽略下面的and操作,而1=1 永远都是true,这意味着无论密码输入什么,都能通过验证。