func clean(s []byte) string {
j := 0
for _, b := range s {
if ('a' <= b && b <= 'z') ||
('A' <= b && b <= 'Z') ||
('0' <= b && b <= '9') ||
b == ' ' {
s[j] = b
j++
}
}
return string(s[:j])
}
func BenchmarkPeterSO(b *testing.B) {
for N := 0; N < b.N; N++ {
b.StopTimer()
bytShakespeare := []byte(strShakespeare)
b.StartTimer()
clean(bytShakespeare)
}
}
strShakespeare := "shakespeare.100-0.txt"
Bài toán: loại bỏ các chuỗi có khả năng gây ra lỗi XSS
XSS: Cross-site Scripting - Reflected
Cho phép kẻ tấn công chèn và thực thi javascript, làm thay đổi cấu trúc của website khác ban đầu, có thể đánh cắp được cookie.
Hầu hết các solution đưa ra đều sử dụng regexp nhưng có vẻ performance không tốt
Case 1:
Trường hợp đơn giản nhất: Remove all characters other than alphabets from string
https://www.geeksforgeeks.org/remove-characters-alphabets-string/
https://stackoverflow.com/questions/38554353/how-to-check-if-a-string-only-contains-alphabetic-characters-in-go
Case này chỉ giữ lại các char là chữ cái và số, còn thiếu các dấu "-", "_"
Cách này:
dùng để loại bỏ 1 số Char của HTML
Case 2:
Có thể xử lý được trường hợp thiếu các dấu "-", "_" Giải pháp của peterSO trong link, có performance rất tốt: https://stackoverflow.com/questions/54461423/efficient-way-to-remove-all-non-alphanumeric-characters-from-large-text
Case 3: NewReplacer
https://levelup.gitconnected.com/multi-string-replace-in-golang-with-replacer-148d4173f439
https://blog.boot.dev/golang/replace-strings-golang/#example-4---high-performance-string-replacement
Link test Code