nodejs抓取动态网页(1.防范sql注入注入简单些说一些违法用户拼接一个)
优采云 发布时间: 2022-01-25 04:08nodejs抓取动态网页(1.防范sql注入注入简单些说一些违法用户拼接一个)
1.防止sql注入
简单来说,sql注入是指一些非法用户拼接一个特殊的用户名或密码,因为我们要将用户名和密码插入到数据库中,肯定会根据用户名和密码拼接一条sql语句。而这个非法用户的特殊用户名声明可能会删除我们数据库中的所有数据。
因为用的是mysql数据库。Nodejs 模块也是 npm 上使用最多的 Mysql 模块。这个模块本身已经提供了访问mysql集群的能力和防止注入的能力。
具体方法请参考官方文档
2.防止接口攻击
我们这里需要做的就是写一个循环,在一些非法用户获取我们的界面时,频繁访问我们的界面。为了防止一些非法用户,他们只是在请求中添加令牌。它是向服务器发出请求时返回给前端的一个令牌,而这个令牌是在前端向后端请求时带上来的。如果令牌在后端被验证,令牌将被销毁。另一个例子是验证请求的源 IP。这里需要注意的是,我们在验证IP的时候,要获取HTTP协议头域中x-forwarded-for属性的值。(两种方法可以一起使用)
不过后来我从后台RD了解到,公司有专门的服务可以用来防作弊,策略也比较全面。目前正在研究以准备访问。
内网机器访问外网
关于跨机房访问、同机房访问、内网访问外网,这些基本都涉及到运维的话题。百度内部有现成的服务接入文档。每个公司可能以不同的方式提供能力。这里不多介绍。
这里有一些小细节。看看下面的图片:
一句话总结:当一个请求到达接入层时,它并不知道自己要访问的是内网环境中机房的服务器。相反,如果内网的机器上有请求外网的链接,例如: . 您需要通过代理访问外网服务器。
要访问界面,我使用请求模块。通过 promise npm 上的 request-promise,我们可以通过名称知道每个方法或调用结果返回什么。该模块已经默认提供了代理参数的相关配置。详情请参考文档
这里涉及到很多知识,比如代理隧道,https请求的代理。阅读官方配置文档的时候,搜索一些关键词,学习一些其他相关知识。
如果有相关需求,可以参考我的配置。如果我的配置不能解决你的问题,请仔细阅读官方文档。,
let options = {
'url': params.url,
'encoding': 'binary',
'rejectUnauthorized': false // 取消https证书的校验
};
// 解决代理https请求的行为 测试机需要配置环境变量 PANSHI_HTTPS_PROXY
if (process.env.PANSHI_DEBUG !== 'true' || PANSHI_HTTPS_PROXY) {
options.tunnel = false;
options.proxy = 'http://xxxx.proxy.com:8080';
}
发送电子邮件
关于开发的介绍到这里就完成了。以下是针对运营和产品要求的一些功能开发。每天将注册用户发送给相应的负责人。
如果你想满足这个功能,你需要有一个邮件服务器。这在公司是公开的,很容易找到。另一种是配置服务的crontab定时执行脚本查询数据库发送邮件。
这里主要使用nodejs模块nodemailer。具体的相关配置和发送邮件的方法请参考官方文档配置,直接点击即可。
网络优化
上面的列表是几个典型的点。例如,将 CSS 放在 head 标签的头部,将 script 标签放在 body 标签的底部。这些应该属于前端工程师的常识。
静态文件部署CDN就不多介绍了,每个公司都会有自己的一套方法。这里主要介绍合并静态文件和缓存静态文件。
1.合并静态文件
默认情况下,FIS3 具有支持合并静态文件的插件。因为我这次开发了很多页面(一共11个主站点页面),并且因为使用块开发来加载模块和静态文件。如果不合并,一个页面加载后需要有10-20个静态文件请求。它会影响页面的加载速度。
准备用FIS3插件合并静态文件的时候,发现配置静态文件一页一页打包合并还是有点麻烦。最后请其他部门的同事使用我们接入层服务器提供的comb功能,服务器会帮我们合并静态文件(其实就是Nginx的concat模块提供的功能)。此处不做过多介绍,直接搜索文章即可了解。
2.缓存静态文件
先看下一张图
上图中红框是http协议中与静态文件缓存相关的字段。如果这些字段的概念比较模糊,可以阅读这篇文章加深印象“HTTP Cache”直接点击
无论使用 express 还是 koa(koa 可以使用 koa-static-cache 中间件),对应的服务静态文件的中间件都提供了配置这些字段的能力。Express可以通过以下方式进行配置(具体可以阅读express文档)
const express = require('express')
// 配置与静态文件相关的参数
express.static('xxxxx')
报酬
最后说说这次开发的收获