1
Andy1999 2015-11-12 08:54:46 +08:00 via iPhone
PDO
|
2
a302800411 2015-11-12 08:55:13 +08:00
执行 SQL 的时候函数用两个参数那种?
|
3
tobyxdd 2015-11-12 08:56:59 +08:00 via Android
PreparedStatement😂😂
|
5
mcone 2015-11-12 09:03:00 +08:00
浓浓的知乎装某器官范儿,你这问题风格应该拉去知乎
个人感觉这东西要啥优雅,又没人看得到,管用就行。优雅如不成,被 x 了就不好玩了 |
6
cocalrush OP |
7
cocalrush OP @mcone 是的,我也是这么想的。
以前都过滤了"and"字符。但是在英文版上 老外输"and"不是一般的多。所以造成了误杀很多。现在精简了下,所以上来问下有没更好的方案。 刚刷了知乎回来, bigger 条涨满了没法释放... |
8
echo1937 2015-11-12 09:07:39 +08:00
口口相传 PreparedStatement 可以防注入,多的我也不知道。
|
9
barbery 2015-11-12 09:20:55 +08:00
必须 prepare 啊,原生防注入
|
10
gdtv 2015-11-12 09:23:32 +08:00
用了 prepare 就可以了,这个完全不是问题,我担心的是带有危险的 js 脚本或者 xss ,这些才麻烦
|
11
winterock 2015-11-12 09:26:55 +08:00
专业的事交给专业的人。
网络攻击这种事情,我只能说防不胜防。 试试知道创宇或者安全宝。 |
12
tabris17 2015-11-12 09:31:22 +08:00 1
放弃拼接 SQL 保平安
|
13
HentaiMew 2015-11-12 09:32:33 +08:00
优雅这个词真的是被用烂了…
|
14
xwing 2015-11-12 09:33:47 +08:00
坚决不用 sql 拼接。 设置数据库操作权限。如果是 java 的话,为什么不用 ORM ?
|
15
zrp1994 2015-11-12 09:36:07 +08:00
base64 加密下?如果不需要查询其中的内容……
|
16
virusdefender 2015-11-12 09:37:27 +08:00 2
|
19
cocalrush OP @virusdefender 这个有点意思... 找时间研究下 感谢。
|
20
thinkmore 2015-11-12 10:17:24 +08:00
|
21
Ouyangan 2015-11-12 10:46:54 +08:00
PreparedStatement . 学习的时候没讲过么...
|
22
penjianfeng 2015-11-12 11:01:08 +08:00
一看就是被知乎害的,啥事儿都要来个”优雅“, WTF ,你先说吧 sql 注入给搞定再说优雅不优雅吧,没学会走就像跑了
|
23
powergx 2015-11-12 11:05:55 +08:00
orm
|
24
hqs123 2015-11-12 11:09:07 +08:00
这个没有优雅不优雅之说,只能预防和发生入侵启用紧急方案。
|
25
yangxiongwei 2015-11-12 11:11:26 +08:00
既然是 Java 项目,用 Druid 做数据源吧
Druid 基于 SQL 语义分析来实现防御 SQL 注入攻击。 |
26
hgc81538 2015-11-12 11:28:49 +08:00 via iPhone
各種語言對注入的解決方法,可參考
http://bobby-tables.com |
27
500miles 2015-11-12 12:08:05 +08:00
我靠靠靠靠靠靠靠靠
嘛玩意儿都要优雅............... 被人脱裤了最优雅 |
29
muzuiget 2015-11-12 12:39:59 +08:00
现在还手工拼 SQL ?
|
30
redkei 2015-11-12 13:33:55 +08:00
如何优雅的。。。?
**是一种什么样的体验? 对不起看到这种知乎风就反胃,忍不住吐槽下能不能正常说话 |
31
kendetrics 2015-11-12 13:36:54 +08:00
参数化
|
32
canesten 2015-11-12 13:49:15 +08:00
用 Java 的没听过 MyBatis 么
|
33
fwings260 2015-11-12 16:47:30 +08:00
借楼问问,防 SQL 注入,前端能做啥?
|
34
crazycen 2015-11-12 16:49:47 +08:00 via Android
不用 sql 就好
|
35
Garantion 2015-11-12 17:53:08 +08:00
@virusdefender 刚刚还想说长亭的 sqlchop 支持!
|
36
ivvei 2015-11-12 18:33:21 +08:00
Java 就不能 PrepareStatement 了?一样可以的吧!
|
38
dallaslu 2015-11-12 20:24:10 +08:00
为每一条 SQL 写一个正则判断。如:
select * from user where username='v2ex' and password='235512' 对应正则 ^select \* from user where username='\w+' and password='\w+'$ |
39
cevincheung 2015-11-12 20:31:25 +08:00
@dallaslu 这要是写个大系统不要死
|
40
dallaslu 2015-11-12 20:42:43 +08:00
@cevincheung 你要优雅还是要命
|
41
cevincheung 2015-11-12 20:50:33 +08:00
@dallaslu 要命
|
42
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' |
43
tflz514 2015-11-12 20:58:33 +08:00
|
44
incompatible 2015-11-12 21:04:57 +08:00
@dallaslu 然而你这方案优雅和保命都不沾边。
执行带参数的 sql 语句唯一正确的方式就是使用 prepared statement |
46
tflz514 2015-11-12 21:15:09 +08:00
|
47
msg7086 2015-11-12 21:19:06 +08:00
只有正确与错误的做法。
正确的做法直接免疫 SQL 注入,不需要防止不防止,不需要关心优雅还是污。 错误的做法都是污。再优雅也污。 |
48
MrMario 2015-11-12 21:35:58 +08:00
@virusdefender 你也去长亭啦?
|
49
virusdefender 2015-11-12 21:54:01 +08:00
@MrMario 嗯,是的~
|
50
dong3580 2015-11-12 22:12:01 +08:00
参数化即可解决,
|
52
dallaslu 2015-11-12 22:30:56 +08:00
@incompatible 然而你能幽默一些么
|
53
feuvan 2015-11-12 23:15:33 +08:00
prepared statement ,优雅的解决方案
|
54
incompatible 2015-11-13 00:48:07 +08:00
@dallaslu 你给了一个业余的解决方案,我纠正了你 这跟幽默有什么关系?
|
55
leehon 2015-11-13 01:02:35 +08:00
我认为比较优雅的方式:检测到测试者提交非法变量,就输出死循环 alert ,或让其浏览器假死崩溃
测试者手忙脚乱,你在屏幕这边自然就优雅了 |
56
dallaslu 2015-11-13 09:22:24 +08:00
@incompatible 楼主问的是「如何优雅」而不是「如何专业」地解决 SQL 注入。所以最关注的不是有效解决问题,而是解决问题的姿势,一定要优美雅致有情调。何况 3 楼已经提到 PreparedStatement ,楼主也补充了是他司对 PreparedStatement 不放心……唯有用逼死人的方案,才能让其顿悟。和你说这些,我一定是醉了……
|
57
incompatible 2015-11-13 11:21:33 +08:00 via iPhone
@dallaslu 然而我也不认为你解决问题的姿势有什么优雅可言
你我笑点和品位不 match 没什么可多说的了 |
58
Bryan0Z 2015-11-13 13:54:03 +08:00 via Android
@incompatible 这也能吵起来……
|