[开源]去年做的资讯网站 vue+node 后端

2018-10-29 17:10:50 +08:00
 witcat

2017 年想从设计转行做前端
闭门苦读半年发现没人愿意要,于是自己一个人 1 个月做了一个资讯网站,用来做找工作的案例
后来生活稳定了(靠接外包,依旧没有找到工作),也没继续更新了。现在想撤下来做点别的东西,旧站有人需要可以拿去随意使用

分为三部分,用户前台,管理后台和 api
有完整的用户投稿和后台审核功能

demo:https://www.nine00.com
源码:https://github.com/witcat/900GUIDE

3162 次点击
所在节点    分享创造
21 条回复
vissssa
2018-10-29 17:15:12 +08:00
顶一个
Pi7bo1
2018-10-29 17:21:26 +08:00
萌新学习
w4n9hu1
2018-10-29 17:35:20 +08:00
设计很好看
DeWhite
2018-10-29 17:38:03 +08:00
缺个远程程序员,月包 3K 活少 事情少。
同做资讯,方向电竞。有意私聊。
746215017chen
2018-10-29 17:57:23 +08:00
@DeWhite 兼职不
Guozi1989
2018-10-29 18:07:29 +08:00
@DeWhite java 后端可接
xqin
2018-10-29 19:18:19 +08:00
@witcat 代码有 bug.

漏洞证明: https://www.nine00.com/u/projectds

漏洞描述: 任意用户密码重置漏洞.

漏洞证明所用 EMAIL: witcat@nine00.com (来自于 github 仓库中 git log 里面的 email).
witcat
2018-10-29 19:22:15 +08:00
@xqin #7 额...厉害厉害 这个项目已经放弃了 bug 有兴趣的各位可以修复
不过你是怎么把重置代码拿到的....???
xqin
2018-10-29 19:23:51 +08:00
@witcat 你猜猜看 :P
witcat
2018-10-29 19:25:50 +08:00
@xqin #9 在下才疏学浅 还请不吝赐教
DeWhite
2018-10-29 19:33:34 +08:00
@Guozi1989
@746215017chen

虽然 3K 报价不算高,但是我有意已经转向离职了。
所以姑且是我第一次创业,所以只招收全栈。
而且设计师,策划我都已经找好了。
xqin
2018-10-29 19:33:48 +08:00
1. 向 `/user/retrivepw` 发起请求, 参数 step:1, 以及要重置的目标 EMAIL

2. 向 `/user/resetemail` 发起请求, 参数 step:1, 之后去自己的邮箱里面收邮件, 查看生成的随机 CODE

3. 向 `/user/retrivepw` 发起请求, 参数 "step":3, "password":"helloworld","secret":CODE

第一步, 在 Session 中记录要被重置的 EMAIL 地址.
第二步, 接收再次生成的 CODE,覆盖原来的那个.
第三步, 提交新生成的 CODE 和密码, 完成密码重置(当然重置的是第一步提交的那个 EMAIL 所对应的账号,而不是当前登陆的).

以上操作步骤 建立在自己已经创建一个小号,并且已经登陆的状态下,小号的邮箱需要可以接收邮件.
xqin
2018-10-29 19:36:18 +08:00
@witcat 被重置密码的那个账号, 修改了个人主页的背景图片,无破坏性测试. 请勿见怪. 谢绝查水表. 谢谢.
witcat
2018-10-29 19:37:58 +08:00
@xqin #12 惊呆了...你们太可怕了 确实给我上了一课
witcat
2018-10-29 19:40:21 +08:00
@xqin #13 不会 谢谢交流 没有什么网络安全经验 我自己想破头大概也想不到能这么搞
xqin
2018-10-29 19:43:31 +08:00
第一步对应的代码:
```
router.post('/retrivepw', function(req, res) {
switch (req.body.step) {
//第一步,生成代码并发送邮件
case 1:

req.session.retrivecode = randomString(15);
req.session.email = req.body.email; //// Session 中记下被重置的 EMAIL
req.session.cookie.expires = new Date(Date.now() + 600000);
```

第二步:
```
router.post('/resetemail', function(req, res) {
switch (req.body.step) {
case 1:
db.users.findOne({
_id: req.session.userid
}, function(err, user) {
req.session.retrivecode = randomString(15); // 重新生成 CODE, 覆盖原来的, 该 CODE 会被发到自己的邮箱里
```


第三步:
```
case 3:
if (req.body.secret != req.session.retrivecode) { /// 提交收到的 CODE, 以便让 if 不成立走后面的代码

return res.send('bad')
}
db.users.findOne({
email: req.session.email ////// 取出之前 Session 中写入的 EMAIL
}, function(err, doc) {
doc.salt = randomString(15);
doc.pass = md5(req.body.password + doc.salt); // 更新密码, 完成重置.
doc.save(function(err) {
req.session.destroy() //当成功保存,销毁 session,不可能无限进入第三步,所以同样的信息,密码只能重置一回
res.send('ok')
})
})

```
iyouyue
2018-10-29 19:59:49 +08:00
不错👍
ZiLong
2018-10-30 10:10:38 +08:00
archived?
zhutiwave
2018-10-30 11:36:45 +08:00
想问一下如何接到外包,猪八戒??
witcat
2018-10-30 16:20:04 +08:00
@zhutiwave #19 找几个小的外包公司合作

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

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

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

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

© 2021 V2EX