如何优雅的防止 sql 注入?

2015-11-12 08:52:20 +08:00
 cocalrush
最近遇到一个麻烦,有一个文本框可以输入任何文本。
现在的解决方案是拦截参数里面的敏感符号(-- ‘ 等)和敏感词( select and 等),但是总觉得不够好。
想请问下如何优雅的防止 sql 注入呢?
非常感谢。
6397 次点击
所在节点    问与答
59 条回复
cevincheung
2015-11-12 20:50:33 +08:00
@dallaslu 要命
raincious
2015-11-12 20:57:25 +08:00
@dallaslu

这是在开玩笑么?

select * from user where username='v2ex' and password='235512'
select * from user where password='235512' and username='v2ex'
select * from user where password = '235512' and username = 'v2ex'
select * from user where password = '235512' and username = 'v2ex'

select *
from user
where password = '235512' and username = 'v2ex'

Select * from user where username='v2ex' and password='235512'
sElect * from user where username='v2ex' and password='235512'
....
select * from user where username='v2ex' anD password='235512'

select * from user where password = '235512' and 1=1 and username = 'v2ex'
select * from user where password = '235512' and 1=1 and 0=0 and username = 'v2ex'
tflz514
2015-11-12 20:58:33 +08:00
incompatible
2015-11-12 21:04:57 +08:00
@dallaslu 然而你这方案优雅和保命都不沾边。
执行带参数的 sql 语句唯一正确的方式就是使用 prepared statement
BlueWolf
2015-11-12 21:13:18 +08:00
@tflz514 截图这工具是自研产品?误报漏报率如何
tflz514
2015-11-12 21:15:09 +08:00
msg7086
2015-11-12 21:19:06 +08:00
只有正确与错误的做法。
正确的做法直接免疫 SQL 注入,不需要防止不防止,不需要关心优雅还是污。
错误的做法都是污。再优雅也污。
MrMario
2015-11-12 21:35:58 +08:00
@virusdefender 你也去长亭啦?
virusdefender
2015-11-12 21:54:01 +08:00
@MrMario 嗯,是的~
dong3580
2015-11-12 22:12:01 +08:00
参数化即可解决,
dallaslu
2015-11-12 22:29:22 +08:00
@raincious 然而程序员知道自己写的 SQL 是什么格式,其他形式的语句就可以忽略了。
dallaslu
2015-11-12 22:30:56 +08:00
@incompatible 然而你能幽默一些么
feuvan
2015-11-12 23:15:33 +08:00
prepared statement ,优雅的解决方案
incompatible
2015-11-13 00:48:07 +08:00
@dallaslu 你给了一个业余的解决方案,我纠正了你 这跟幽默有什么关系?
leehon
2015-11-13 01:02:35 +08:00
我认为比较优雅的方式:检测到测试者提交非法变量,就输出死循环 alert ,或让其浏览器假死崩溃
测试者手忙脚乱,你在屏幕这边自然就优雅了
dallaslu
2015-11-13 09:22:24 +08:00
@incompatible 楼主问的是「如何优雅」而不是「如何专业」地解决 SQL 注入。所以最关注的不是有效解决问题,而是解决问题的姿势,一定要优美雅致有情调。何况 3 楼已经提到 PreparedStatement ,楼主也补充了是他司对 PreparedStatement 不放心……唯有用逼死人的方案,才能让其顿悟。和你说这些,我一定是醉了……
incompatible
2015-11-13 11:21:33 +08:00
@dallaslu 然而我也不认为你解决问题的姿势有什么优雅可言
你我笑点和品位不 match 没什么可多说的了
Bryan0Z
2015-11-13 13:54:03 +08:00
@incompatible 这也能吵起来……
fwings260
2015-11-16 09:19:21 +08:00
@mornlight 果然。。。去年在那公司,破 B 后台非让我加个正则,我说前端你加的再多,别人想黑你一样能绕过,有啥用。。。。他就是让我加,还各种改来改去。。。。弃坑果然没错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235512

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX