作者ChenCH1986 (Chen,C.H.)
看板Web_Design
标题[问题] API安全性
时间Fri May 15 14:56:46 2015
各位先进好,
小弟有个问题想请教一下
目前正在制作一个API,该API是用PHP所撰写的
使用者可以透过该API去捞取资料
但现在问题了,由於我是使用ajax 搭配jsonp格式来跨域传递
我担心是用GET方式传送
GET方式传送使用者只要检视原始码
就可以知道我塞的参数是甚麽,传送的资料是甚麽
会不会直接在API的网址列後面更改个参数就可以查到要查的资料?
因此想询问有没有甚麽做法是安全的
至少不要让使用者改个使用者ID就可以捞出其他人资料
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.76.94.27
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1431673010.A.630.html
1F:→ mmis1000: 设定一个针对某使用者的暂时性token验证阿,登入时给他 05/15 16:04
2F:→ mmis1000: 这样别人没token也不能拿到资料,或是网址本身就是token 05/15 16:05
3F:→ mmis1000: 只要长度稍微长一点,每次登入都换,根本不可能猜到 05/15 16:05
4F:推 Ayukawayen: 简单一点就POST传参数 走HTTPS 05/15 16:34
5F:→ mmis1000: jsonp哪来POST阿...顺带一提,plurk的realtime api 05/15 16:39
6F:→ Ayukawayen: 啊 你是担心使用者改参数 那就放token在参数里 05/15 16:39
7F:→ mmis1000: 就是生成很长一次性网址的 05/15 16:40
就在我po完文章之後, 想到了与一楼大大一样的办法
就是我再做一个产生token的api(称为a), 是透过md5去产生
主要是要使用不可逆的加密函数, 虽然md5据说已经可逆了
但我的查询资料并不是那麽有价值去破解, 只是不想让使用者轻易地取得他人资料
接着在我真正要呼叫的api(称为b)里面一样去产生一个md5
b api产生md5规则与产生a api内容一样
产生的规则主要是用时间, 到秒为单位, 另外再随意加上一些字串搭配
如此一来就可以比对是否是在当下同时去得到相同的密码
假如相同, 表示使用者是透过网站程式码传递
假使不同, 表示使用者拿过期的密码来传递资料, 因此捞不出任何东西
以上做法应该是正确的, 在此也提供给大一个参考的做法
※ 编辑: ChenCH1986 (42.76.94.27), 05/15/2015 16:48:59
8F:→ mmis1000: token这种东西可不能在client产生阿... 05/15 20:54
9F:→ ChenCH1986: client 呼叫server api产生 05/16 09:53