enhance(backend): プロフィールのリンク検証にtry-catchを追加 (#13882)
* enhance(backend): プロフィールのリンク検証にtry-catchを追加
* ✌️
			
			
This commit is contained in:
		| @@ -498,26 +498,32 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 	private async verifyLink(url: string, user: MiLocalUser) { | ||||
| 		if (!safeForSql(url)) return; | ||||
|  | ||||
| 		const html = await this.httpRequestService.getHtml(url); | ||||
| 		try { | ||||
| 			const html = await this.httpRequestService.getHtml(url); | ||||
|  | ||||
| 		const { window } = new JSDOM(html); | ||||
| 		const doc = window.document; | ||||
| 			const { window } = new JSDOM(html); | ||||
| 			const doc = window.document; | ||||
|  | ||||
| 		const myLink = `${this.config.url}/@${user.username}`; | ||||
| 			const myLink = `${this.config.url}/@${user.username}`; | ||||
|  | ||||
| 		const aEls = Array.from(doc.getElementsByTagName('a')); | ||||
| 		const linkEls = Array.from(doc.getElementsByTagName('link')); | ||||
| 			const aEls = Array.from(doc.getElementsByTagName('a')); | ||||
| 			const linkEls = Array.from(doc.getElementsByTagName('link')); | ||||
|  | ||||
| 		const includesMyLink = aEls.some(a => a.href === myLink); | ||||
| 		const includesRelMeLinks = [...aEls, ...linkEls].some(link => link.rel === 'me' && link.href === myLink); | ||||
| 			const includesMyLink = aEls.some(a => a.href === myLink); | ||||
| 			const includesRelMeLinks = [...aEls, ...linkEls].some(link => link.rel === 'me' && link.href === myLink); | ||||
|  | ||||
| 		if (includesMyLink || includesRelMeLinks) { | ||||
| 			await this.userProfilesRepository.createQueryBuilder('profile').update() | ||||
| 				.where('userId = :userId', { userId: user.id }) | ||||
| 				.set({ | ||||
| 					verifiedLinks: () => `array_append("verifiedLinks", '${url}')`, // ここでSQLインジェクションされそうなのでとりあえず safeForSql で弾いている | ||||
| 				}) | ||||
| 				.execute(); | ||||
| 			if (includesMyLink || includesRelMeLinks) { | ||||
| 				await this.userProfilesRepository.createQueryBuilder('profile').update() | ||||
| 					.where('userId = :userId', { userId: user.id }) | ||||
| 					.set({ | ||||
| 						verifiedLinks: () => `array_append("verifiedLinks", '${url}')`, // ここでSQLインジェクションされそうなのでとりあえず safeForSql で弾いている | ||||
| 					}) | ||||
| 					.execute(); | ||||
| 			} | ||||
|  | ||||
| 			window.close(); | ||||
| 		} catch (err) { | ||||
| 			// なにもしない | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 かっこかり
					かっこかり