เพื่อให้ Web Server ของเราปลอดภัยจากการถูกโจมตี บทความนี้จะเป็นการแนะนำการกำหนดค่าต่างๆของ web server ที่ให้บริการ ซึ่งทำงานด้วยบน Windows Server และ มีการติดตั้ง IIS, PHP, MySql, ASP.Net และ WordPress
การกำหนดส่วนของ Windows Server อ้างอิงคำแนะนำจาก Quays SSL Labs ให้ได้ระดับ A ขึ้นไป
ใช้ใบรับรองจาก CA ที่น่าเชื่อถือ และ ใช้การ RSA 2048 bits (SHA256withRSA) ขึ้นไป
การป้องกันการเรียกดู user data ผ่าน REST API ใน WordPress กรณีนี้ควรติดตั้งส่วนเสริมไม่ให้สามารถเรียกใช้งานผ่าน REST API โดยไม่มีการยืนยันตัวตนก่อน เช่น Disable WP REST API
Windows Server 2022 รองรับ TLS 1.2 และ TLS 1.3 หมายเหตุ ทั้งนี้ Windows Server 2022 เพิ่มการรองรับ TLS 1.3 อย่างไรก็ตาม หากเปิดใช้งานทั้ง TLS 1.2 และ 1.3 Site Scanner จะส่งผลให้ได้เกรด A เท่านั้น เนื่องจากปัจจุบัน Windows Server ไม่รองรับการป้องกันการโจมตีแบบดาวน์เกรด หากไคลเอนต์ร้องขอ TLS 1.3 Windows จะยังคงอนุญาตให้ปรับไปใช้ TLS 1.2 ได้ และนั่นคือสาเหตุที่ Site Scanner รายงานเกรด A แทนที่จะเป็น A+
ช่วงนี้เป็นช่วงที่ต้อง Mail ขอนัดประชุมเพื่อขอข้อมูลเพื่อจัดทำ Data Lake จากหลายๆหน่วยงานเป็นจำนวนมาก เลยลองตั้งคำถามว่า “mail ขอนัดประชุมควรจะประกอบด้วยหัวข้ออะไรบ้าง” ถึงจะครบถ้วน เหมาะสม สือสารตรงจุด ผู้รับ Mail อยากจะตอบรับ อยากประชุมกับเรา ผลการค้นหาและประมาณผลด้วยตัวเองออกมาประมาณนี้ครับ
Subject Mail
Subject Mail ต้องชัดเจนและกระชับ ช่วยให้ผู้เห็น Subject Mail แล้วพอจะรับรู้ได้ว่าเนื้อ Mail จะเกี่ยวกับเรื่องอะไร เช่น ขอนัดประชุมเรื่อง…. ขอเชิญประชุมเรื่อง… ขอนำเสนอผลงานเรื่อง… ขอนัดปรึกษาเรื่อง… ขอชี้แจ้งเรื่อง…
เริ่มเนื้อ Mail ด้วยการทักทายที่สุภาพและเหมาะสมกับความสัมพันธ์ ตำแหน่งหน้าที่ วัยวุฒิ
เพื่อให้ผู้รับ Mail ติดต่อได้ง่ายและตามช่องทางที่ทางผู้รับ Mail สะดวก เช่น “กรุณาแจ้งกลับภายในวันที่ [วันที่] เวลา [เวลา] คุณ/ท่าน สามารถติดต่อกลับได้ที่ [ชื่อ นามสกุล] [หมายเลขโทรศัพท์] หรือ [ที่อยู่อีเมล]”
ทั้งหมดนี้คือหัวข้อที่น่าจะต้องมีใน Mail ขอนัดประชุมครับ สำหรับผมคิดว่าหัวข้อที่ว่า ถ้าการประชุมครั้งนี้เกิดหรือสำเร็จ ทางผู้เข้าประชุมจะได้รับประโยชน์อะไรบ้างเป็นหัวข้อที่สำคัญที่สุดและน่าจะทำให้ผู้รับ Mail ให้ความสนใจ ยิ่งเป็นประโยชน์ที่ช่วยงานให้ดีขึ้น สะดวกขึ้นก็จะยิ่งเพิ่มความน่าเข้าร่วมประชุมมากขึ้นไปอีกระดับ
private List<Province> provinces = new List<Province>();
protected override void OnInitialized()
{
provinces.AddRange(new List<Province> {
new Province(1,"สงขลา"),
new Province(2,"ปัตตานี"),
new Province(3,"ยะลา"),
new Province(4,"นราธิวาส"),
new Province(5,"สตูล")
});
}
public class Province
{
public Int32 ID;
public string Name;
public Province(int id, string name)
{
ID = id;
Name = name;
}
}
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
1.2 สร้างเมธอดในการสร้าง Template ลายน้ำต้นฉบับ เพื่อใช้ในการทำลายน้ำให้กับไฟล์ PDF ที่ต้องการ
////กรณียังไม่เคยสร้างหรือมี Template มาก่อน ให้เรียกใช้งาน CreateTemplate("ข้อความที่ต้องการให้แสดงในเทมเพลต",พาธที่จะสร้างไฟล์เทมเพลตดังกล่าว)
public void CreateTemplate(stringwatermarkText, stringtargetFileName)
{
var document = new Document();
////ระบุพาธที่ต้องการสร้างไฟล์เทมเพลต
var pdfWriter = PdfWriter.GetInstance(document, new FileStream(targetFileName, FileMode.Create));
///ระบุค่าต่างๆเกี่ยวกับตัวอักษรที่จะแสดงผลในเทมเพลตลายน้ำที่สร้างขึ้น
var font = new Font(Font.FontFamily.HELVETICA, 60, Font.NORMAL, BaseColor.LIGHT_GRAY);
document.Open();
////ระบุค่าข้อความ และค่าต่างๆให้กับลายน้ำที่ต้องการ
ColumnText.ShowTextAligned(pdfWriter.DirectContent, Element.ALIGN_CENTER, new Phrase(watermarkText, font), 300, 400, 45);
document.Close();
}
ตัวอย่าง ไฟล์ PDF ของ Template ลายน้ำที่ได้จากการเรียกใช้งานเมธอด CreateTemplate ข้างต้น
1.3 สร้างเมธอดในการจัดทำลายน้ำข้อความให้กับไฟล์ PDF จาก template ลายน้ำต้นฉบับ
public voidAddTextWatermark(stringsourceFilePath, stringwatermarkTemplatePath, stringtargetFilePath)
{
///ระบุพาธไฟล์ต้นทางที่ต้องการทำข้อความลายน้ำ
var pdfReaderSource = new PdfReader(sourceFilePath);
///ระบุพาธไฟล์ปลายทางที่ต้องการบันทึกไฟล์แบบมีลายน้ำ
var pdfStamper = new PdfStamper(pdfReaderSource, new FileStream(targetFilePath, FileMode.Create));
///ระบุพาธของไฟล์ต้นแบบลายน้ำที่จัดทำไว้
var pdfReaderTemplate = new PdfReader(watermarkTemplatePath);
var page = pdfStamper.GetImportedPage(pdfReaderTemplate, 1);
///ทำการวนลูปเพื่อทำลายน้ำให้กับไฟล์ PDF ทีละหน้า
for (var i = 0; i < pdfReaderSource.NumberOfPages; i++)
{
///ระบุตำแหน่งในการแสดงผลลายน้ำกับเนื้อหาในไฟล์ PDF กรณีนี้คือวางไว้ใต้เนื้อหา แต่หากต้องการให้อยู่บนเนื้อหาให้เปลี่ยนเป็น GetOverContent แทน
var content = pdfStamper.GetUnderContent(i + 1);
content.AddTemplate(page, 0, 0);
}
pdfStamper.Close();
pdfReaderTemplate.Close();
}
1.4 เรียกใช้งานเมธอดเพื่อทำลายน้ำให้กับไฟล์ PDF ที่ต้องการ(กรณีนี้สมมุติให้เป็นการกดปุ่มเพื่อเรียกใช้งานเมธอดดังกล่าว)
แต่สำหรับเนื้อหาในไฟล์ PDF โดยทั่วไปแล้ว สามารถใช้งาน GetUnderContent ได้ตามปกติ เพื่อไม่ให้ข้อความลายน้ำบดบังเนื้อหาในเอกสาร
แบบที่ 2การสร้างลายน้ำแบบรูปภาพให้กับเอกสาร PDF โดยจะขอยกตัวอย่างให้ดู 2 แบบนะคะ คือแบบที่สร้างลายน้ำบนไฟล์ PDF ใหม่ และแบบที่สร้างลายน้ำบนไฟล์ต้นทางเดิมค่ะ
public voidAddImageWatermark(stringsourceFilePath, stringwatermarkImagePath, stringtargetFilePath)
{
///ระบุพาธไฟล์ต้นทางที่ต้องการทำภาพลายน้ำ
var pdfReader = new PdfReader(sourceFilePath);
///ระบุพาธไฟล์ปลายทางที่ต้องการบันทึกไฟล์แบบมีภาพลายน้ำ
var pdfStamper = new PdfStamper(pdfReader, new FileStream(targetFilePath, FileMode.Create));
///ระบุพาธของไฟล์ภาพที่ต้องการนำมาทำภาพลายน้ำ
var image = iTextSharp.text.Image.GetInstance(watermarkImagePath);
image.SetAbsolutePosition(200, 400);
///ทำการวนลูปเพื่อทำภาพลายน้ำให้กับไฟล์ PDF ทีละหน้า
for (var i = 0; i < pdfReader.NumberOfPages; i++)
{
var content = pdfStamper.GetUnderContent(i + 1);
content.AddImage(image);
}
pdfStamper.Close();
}