嗨,大家好。
今天我开始要接手一个新的安全性较高的项目了,目前在进行到设计表单的阶段上遇到了一些以前不曾细想的安全问题,那就是如何设计表单名。
问题如下:
1、 如果表单设计如下,name
属性为“user_name”,那么这样不是给别人猜到了数据库的设计了吗?
<input type="text" name="user_name" />
<input type="password" name="user_pswd" />
2、 设计如下表单,这种表单名在后端比较容易使用处理,直接$_POST['user']即可得到所有的相关值。那么相对于 1 中的表单名,下面的表单名会不会有什么隐患呢?
<input type="text" name="user[user_name]" />
<input type="password" name="user[user_pswd]" />
3、 设计表单名的时候,不直接对应到数据库字段名,然后表单提交到后端时,在映射回对应的数据库字段名,这样做需要写许多获取表单值的代码了。
<input type="text" name="user[nick_name]" />
<input type="password" name="user[a_password]" />
以上,综合安全性和开发效率,选择哪种好?或者还有其它方式?
各位帮忙看看,谢谢~
1
jarlyyn 2015-04-20 11:50:36 +08:00 1
1.为啥要直接用字段名作为inputname,不是很能理解。
2.为啥字段名被暴露后就没这么安全了?drupal/wp之类的表结构不是固定的么,难道也不安全了? 3.你自己写个类不就能解决这个问题了么…… |
2
oott123 2015-04-20 12:05:10 +08:00 via Android 1
我觉得随你便…
做好过滤就行了。 你不会告诉我说你直接把整个 POST 进来的数组就那么插入数据库了吧? |
3
littlehz 2015-04-20 12:21:05 +08:00 1
1、input name 和数据库字段名是否一致,无所谓
2、任何命名方式,外部传入的数据都是要做处理、过滤,intval、trim,判断 >= <=,长度等等,身份证、手机号、座机号、QQ号至少需要格式验证。 3、需要入库的数据另外在程序里拼数组,通过PDO的prepare execute做SQL安全转义。 4、看你的想法是打算把 $_POST 或者 $_POST['user'] 直接丢数据库,算了吧。 5、即使用$_POST['user']能得到全部的数据,一样需要$_POST['user']['user_name']一条一条在程序里检查输入 |
4
loading 2015-04-20 12:33:21 +08:00 via iPhone 1
您不会是后台直接拼sql吧?因为只有这样你的所谓便利才体现出来。
听说过sql注入吗? 如果你防了注入,你应该不会问这样的问题。 |
5
v2Geeker OP |
6
lichao 2015-04-20 13:23:59 +08:00
1 猜到数据库设计又能如何?很多开源项目,数据库设计不都是公开的吗?
2 最好在 $_POST['user'] 后加个白名单过滤,因为别人可以随意修改你的表单, 参照 Rails 的 params.require(:user).permit(:username, :user_pswd) 3 又回到问题 1 了,设计的目标是别人知道数据库结构,你也应该能保证安全 |
7
lujiajing1126 2015-04-20 13:53:56 +08:00
一般都是和后台字段名公用的吧,写起来简单粗暴
数据库这个。你只要不被人注入,他知道又能怎么样。。 参考simple_form这个gem包。。 |
8
tabris17 2015-04-20 13:54:21 +08:00
猜到数据库字段名字又怎样。如果程序安全人家也不能拿你咋地,如果程序不安全,人家不知道字段名也一样能爆库
|
9
wind4 2015-04-20 14:14:54 +08:00
你需要表前缀、字段前缀、各种前缀
|
10
php230 2015-04-20 15:50:49 +08:00
不用数据库字段名是对的,至于使用什么规则命名,觉得什么方便用什么就OK
|
11
pany 2015-04-20 17:06:39 +08:00
sql语句预编译吧
|
12
Felldeadbird 2015-04-20 17:18:47 +08:00
人家要暴库,你是的手段是只能防君子,不防小人。后端做好过滤处理,就行了。话说随着技术的发展,现在SQL注入都是以老旧程序为主,而XSS更容易被人忽略。看看乌云上各大公司的,更多漏洞出现在XSS、逻辑错误上。
|
13
yakczh 2015-04-20 21:37:27 +08:00
表单名字用 A...z 后端建立个map,接受参数转换一下,这样就不怕猜到表名了
|