再谈安全 - SQL

不能放过任何细节,小错会变成大错,只要有一个小地方能撕开个口子,将会是非常大的安全隐患。

服务器上不要放一些没用的页面,能输出有用信息的,debug信息,不要显示异常信息给页面上(特别是那个asp.net的默认异常页面),显得太不专业。

数据库帐号,千万不要用root/sa帐号,针对每个应用/项目开帐号,严格控制权限(select/update...),只访问有需要库,注意mysql存储过程访问权限。

禁止其它ip访问数据库(仅允许web应用服务器访问或office临时需要但要限制ip)

版本,尽量用新一点的,但要稳定版本,与时俱进,比如.net framework4+, mysql5.5+,tornado4+

用户输入,要特别小心,特别是暴露在前端的,一个输入可能让系统毁掉,永远不要相信用户输入,所以合法性验证非常必要,知道你做的项目的重要性。

SQL注入,老生常谈,还在拼接SQL语句的,应该一律枪毙。任何语言里任何地方任何情况,都坚决不能出现以下写法

SELECT * FROM tblApps WHERE title ='"+q+"' LIMIT 10

 

必须使用参数化

MySqlCommand cmd = new MySqlCommand("SELECT * FROM tblApps WHERE title =?title LIMIT 10", con);
cmd.Parameters.Add("?title", MySqlDbType.VarChar50);
cmd.Parameters[0].Value = q;

 

Python里的MySQLdb

 

cur.execute("SELECT t1,t2 FROM tbl WHERE p=%s limit %s,%s",(q,0,10))

-- 这本身就是参数化了,类似上面c#的
cur.execute(sqlstring,(parameters))

 

posted @ 2015-05-08 14:40  chy710  阅读(49)  评论(0)    收藏  举报