diff --git a/frontend/Web/index.js b/frontend/Web/index.js
index 1a97777..a0c4fb8 100644
--- a/frontend/Web/index.js
+++ b/frontend/Web/index.js
@@ -2,6 +2,8 @@ const express = require('express');
const { createServer } = require('node:http');
const { join } = require('node:path');
const { Server } = require('socket.io');
+const IsValid=require('./validator.js');
+const Validing=process.env['VALIDING'];
const app = express();
const server = createServer(app);
@@ -46,6 +48,12 @@ async function GetResult(session_token,operation_token) {
{
const ret=message_map.get(session_token).get(operation_token);
message_map.get(session_token).delete(operation_token);
+ if(Validing=='True'){
+ if(!(await IsValid(ret)))
+ {
+ ret="Invalid Content";
+ }
+ }
return ret;
}
}
@@ -124,6 +132,13 @@ io.on('connection', async (socket) => {
});
socket.on('request', async (msg) => {
console.log('message: ' + msg);
+ if(Validing=='True'){
+ if(!(await IsValid(msg)))
+ {
+ socket.emit('response', "Invalid Input");
+ return;
+ }
+ }
const substrings = msg.trim().split('\n')[0].split(' ');
const head=substrings[0];
const session_token=substrings[1];
diff --git a/frontend/Web/login.html b/frontend/Web/login.html
index 5f6b18b..b4831eb 100644
--- a/frontend/Web/login.html
+++ b/frontend/Web/login.html
@@ -95,16 +95,13 @@
var username = document.getElementById("user_name").value;
var password = document.getElementById("password").value;
var ret=await Request("su "+username+" "+password);
- if(ret=="Invalid")
- {
- alert("Invalid username or password");
- }
- else
+ if(ret=="[empty]")
{
await UpdateUserInfo();
document.querySelector('.content').innerHTML = '
Login Success
Redirecting to home page in 3 seconds...
';
setTimeout(function(){window.location.href="/";},3000);
}
+ else alert("Invalid username or password");
}
diff --git a/frontend/Web/package-lock.json b/frontend/Web/package-lock.json
index 272a80d..0df0dd9 100644
--- a/frontend/Web/package-lock.json
+++ b/frontend/Web/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.0.0.1",
"license": "ISC",
"dependencies": {
+ "@alicloud/pop-core": "^1.7.13",
"async-lock": "^1.4.0",
"async-mutex": "^0.4.0",
"express": "^4.18.2",
@@ -16,6 +17,34 @@
"socket.io": "^4.7.2"
}
},
+ "node_modules/@alicloud/pop-core": {
+ "version": "1.7.13",
+ "resolved": "https://registry.npmjs.org/@alicloud/pop-core/-/pop-core-1.7.13.tgz",
+ "integrity": "sha512-agzr4DU+aAGW7/2mp2hP1JcNJkn/zBS0jUGQt5etIASN0MVq1tMdudVqvWbExUG0mUouo/n2VgdnjOHjswvrlA==",
+ "dependencies": {
+ "debug": "^3.1.0",
+ "httpx": "^2.1.2",
+ "json-bigint": "^1.0.0",
+ "kitx": "^1.2.1",
+ "xml2js": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@alicloud/pop-core/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/@alicloud/pop-core/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
"node_modules/@socket.io/component-emitter": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
@@ -80,6 +109,14 @@
"node": "^4.5.0 || >= 5.9"
}
},
+ "node_modules/bignumber.js": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
+ "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -455,6 +492,36 @@
"node": ">= 0.8"
}
},
+ "node_modules/httpx": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/httpx/-/httpx-2.3.1.tgz",
+ "integrity": "sha512-l5rcAoKP8A9XOIlcIA87Wt9A7AX2fgOslHOF4WB5Q24y/1+aeH8b7c7NKfm+Bcf+h0u4FHNtLCriC4mAFmCYgg==",
+ "dependencies": {
+ "@types/node": "^20",
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/httpx/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/httpx/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -479,6 +546,19 @@
"node": ">= 0.10"
}
},
+ "node_modules/json-bigint": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "dependencies": {
+ "bignumber.js": "^9.0.0"
+ }
+ },
+ "node_modules/kitx": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/kitx/-/kitx-1.3.0.tgz",
+ "integrity": "sha512-fhBqFlXd0GkKTB+8ayLfpzPUw+LHxZlPAukPNBD1Om7JMeInT+/PxCAf1yLagvD+VKoyWhXtJR68xQkX/a0wOQ=="
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -660,6 +740,11 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "node_modules/sax": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
+ "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
+ },
"node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
@@ -894,6 +979,26 @@
"optional": true
}
}
+ },
+ "node_modules/xml2js": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "engines": {
+ "node": ">=4.0"
+ }
}
}
}
diff --git a/frontend/Web/package.json b/frontend/Web/package.json
index 17be8d2..efb0836 100644
--- a/frontend/Web/package.json
+++ b/frontend/Web/package.json
@@ -11,6 +11,7 @@
"license": "ISC",
"type": "commonjs",
"dependencies": {
+ "@alicloud/pop-core": "^1.7.13",
"async-lock": "^1.4.0",
"async-mutex": "^0.4.0",
"express": "^4.18.2",
diff --git a/frontend/Web/passwd.html b/frontend/Web/passwd.html
index b21608c..3d8e897 100644
--- a/frontend/Web/passwd.html
+++ b/frontend/Web/passwd.html
@@ -104,17 +104,14 @@
var old_password = document.getElementById("old_password").value;
var new_password = document.getElementById("new_password").value;
var ret=await Request("passwd "+username+" "+old_password+" "+new_password);
- if(ret=="Invalid")
- {
- alert("Invalid username or old password");
- }
- else
+ if(ret=="[empty]")
{
// 删除注册框,在中间显示“注册成功”,三秒后自动跳转到首页
document.querySelector('.passwd-box').style.display = 'none';
document.querySelector('.content').innerHTML = 'Successfully changed password
Redirecting to home page in 3 seconds...
';
setTimeout(function(){window.location.href="/";},3000);
}
+ else alert("Invalid username or old password");
}
diff --git a/frontend/Web/register.html b/frontend/Web/register.html
index f088bb7..8bd6bb9 100644
--- a/frontend/Web/register.html
+++ b/frontend/Web/register.html
@@ -98,17 +98,14 @@
var password = document.getElementById("password").value;
var nick_name = document.getElementById("nickname").value;
var ret=await Request("register "+username+" "+password+" "+nick_name);
- if(ret=="Invalid")
- {
- alert("Invalid username or password");
- }
- else
+ if(ret=="[empty]")
{
// 删除注册框,在中间显示“注册成功”,三秒后自动跳转到首页
document.querySelector('.register-box').style.display = 'none';
document.querySelector('.content').innerHTML = 'Register Success
Redirecting to home page in 3 seconds...
';
setTimeout(function(){window.location.href="/";},3000);
}
+ else alert("Invalid username or password");
}
diff --git a/frontend/Web/validator.js b/frontend/Web/validator.js
new file mode 100644
index 0000000..c362556
--- /dev/null
+++ b/frontend/Web/validator.js
@@ -0,0 +1,70 @@
+const RPCClient = require("@alicloud/pop-core");
+
+console.log(process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'])
+console.log(process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
+
+
+ // 注意,此处实例化的client请尽可能重复使用,避免重复建立连接,提升检测性能。
+let client = new RPCClient({
+ /**
+* 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
+* 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
+* 常见获取环境变量方式:
+* 获取RAM用户AccessKey ID:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
+* 获取RAM用户AccessKey Secret:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
+*/
+ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
+ accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
+ // 接入区域和地址请根据实际情况修改
+ endpoint: "https://green-cip.cn-beijing.aliyuncs.com",
+ apiVersion: '2022-03-02',
+ // 设置http代理
+ // httpProxy: "http://xx.xx.xx.xx:xxxx",
+ // 设置https代理
+ // httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
+});
+async function IsValid(text) {
+ console.log("IsValid called");
+ console.log("cheching text: "+text);
+ // 去除text中的空格、tab、无意义特殊符号(!@#$%^&*()_+_=~`{}|[]\;':",./<>?)等。
+ //text = text.replace(/\s+/g, "");
+ text = text.replace(/[!@#$%^&*()_+_=~`{}|[\]\\;':",./<>?]+/g, "");
+ // 再去除换行和回车
+ //text = text.replace(/[\r\n]/g, "");
+ console.log("after replace: "+text);
+ // 通过以下代码创建API请求并设置参数。
+ const params = {
+ // 文本检测service:内容安全控制台文本增强版规则配置的serviceCode,示例:chat_detection
+ "Service": "chat_detection",
+ "ServiceParameters": JSON.stringify({
+ //待检测文本内容。
+ "content": text
+ }),
+ };
+
+ const requestOption = {
+ method: 'POST',
+ formatParams: false,
+ };
+ let response;
+ try {
+ // 调用接口获取检测结果。
+ response = await client.request('TextModeration', params, requestOption);
+ // 自动路由。
+ if (response.Code === 500) {
+ // 区域切换到cn-beijing。
+ client.endpoint = "https://green-cip.cn-shanghai.aliyuncs.com";
+ response = await client.request('TextModeration', params, requestOption);
+ }
+ } catch (err) {
+ console.log(err);
+ }
+ if(response['Message']=='OK')
+ {
+ console.log(response['Data']['reason']);
+ return response['Data']['reason']=="";
+ }
+ return false;
+}
+
+module.exports=IsValid;
\ No newline at end of file