2023年11月30日发(作者:)
web开发常见安全问题(SQL注⼊、XSS攻击、CSRF攻击)
SQL注⼊
SQL攻击(SQL injection),简称注⼊攻击,是发⽣于应⽤程序之层的安全漏洞。简⽽⾔之,是在输⼊的字符串之中注⼊SQL指
令,在设计不良的程序当中忽略了检查,那么这些注⼊进去的指令就会被数据库服务器误认为是正常的SQL指令⽽运⾏,因此遭到破坏或是
⼊侵。
原因
在应⽤程序中若有下列状况,则可能应⽤程序正暴露在SQL Injection的⾼风险情况下:
1. 在应⽤程序中使⽤字符串联结⽅式组合SQL指令。
2. 在应⽤程序链接数据库时使⽤权限过⼤的账户(例如很多开发⼈员都喜欢⽤sa(内置的最⾼权限的系统管理员账户)连接Microsoft
SQL Server数据库)。
3. 在数据库中开放了不必要但权⼒过⼤的功能(例如在Microsoft SQL Server数据库中的xp_cmdshell延伸预存程序或是OLE
Automation预存程序等)
[java]
1.
2. strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
也就是实际上运⾏的SQL命令会变成下⾯这样的
[java]
1.
2. strSQL = "SELECT * FROM users;"
因此达到⽆账号密码,亦可登录⽹站。所以SQL注⼊攻击被俗称为⿊客的填空游戏。
[java]
1. String sql = "select* from users where username='" + userName
2. + "' and password='" + passWord+"'";
3. Connection conn = null;
4. Statement state = null;
5. ResultSet result;
6. conn = nection();
[java]
1. String sql = "select* from users where username=? and password=?";
2. Connection conn = null;
3. PreparedStatement state = null;
4. ResultSet result;
5. conn = nection();
6. n(sql);
7. try {
8. state = eStatement(sql);
9. ing(1, userName);
10. ing(2, passWord);
11. result = eQuery();
-------------------------------------------------------------------------------------------------------------------
java中preparedstatement为什么可以防⽌sql注⼊
其实是功能,⽤preparedstatement就会把sql的结构给数据库。
攻 击 是利⽤是指利⽤ 设计 上的漏洞,在⽬ 标 服 务 器上运⾏ Sql语 句以及 进 ⾏其他⽅式的 攻 击 ,
假设有以下index.页⾯:
[php]
1.
2. [php] 1. 2. Welcome 3.
