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();

-------------------------------------------------------------------------------------------------------------------

javapreparedstatement为什么可以防⽌sql注⼊

其实是功能,⽤preparedstatement就会把sql的结构给数据库。

攻 击 是利⽤是指利⽤ 设计 上的漏洞,在⽬ 标 服 务 器上运⾏ Sql语 句以及 进 ⾏其他⽅式的 攻 击 ,

假设有以下index.页⾯:

[php]

1.

2.

[php]

1.

2. Welcome

3.