با htmlspecialchars انجام دهید و ندهید!

با htmlspecialchars انجام دهید و ندهید!
با htmlspecialchars انجام دهید و ندهید!


بر اساس مستندات پی‌اچ‌پی، این تابع، کاراکترهای ویژه را به Entityهای اچ‌تی‌ام‌ال تبدیل می‌کند!

معنای HTML Entity: رشته‌ای متنی است که با علامت (&) شروع شده و با (;) خاتمه می‌یابد. (توضیح از مترجم)

ایده‌ی بد: استفاده‌کردن از آن برای پاک‌سازی ورودی‌ها

این متد در واقع برای تبدیل کاراکترهای مرتبط به HTML به معادل آن‌ها یعنی Entityها ساخته شده است، و برای این نیست که پیش از عملیات ذخیره‌سازی -مثل درج یک رکورد به وسیله‌ی Insert در SQL- ورودی‌های کاربر را پاک‌سازی کنند!

<?php
// Example
$username = htmlspecialchars($_POST['username']);
$db->query("SELECT * FROM users WHERE username = $username");

این کار نه تنها از SQL Injection جلوگیری نمی‌کند، بلکه داده‌ها را به شکلی غیر قابل بازگشت، به HTML Entity تبدیل می‌کند و دیگر راهی برای ویرایش پیام اصلی توسط کاربر باقی نمی‌ماند.

ایده‌ی خوب: استفاده‌کردن از آن برای پاک‌سازی محتوای کاربر

این متد را زمانی به کار می‌بریم که محتوا را به یک صفحه ارسال کنیم؛ همانطور که پیش‌تر اشاره شد: این متد برای تبدیل کاراکترهای مرتبط به HTML به معادل آن‌ها یعنی Entityها ساخته شده است، پس در اینجا می‌تواند کاربرد خوب و مناسبی داشته باشد.

مثلاً در سیستم انجمن یا بخش دیدگاه وب‌سایت، این متد می‌تواند از رخ‌دادن XSS جلوگیری کند؛ به تکه کد زیر دقت کنید:

<?php
// Example
$comment = 'This is a comment  to test XSS';
?>
// ...
<article><?= htmlspecialchars($comment); ?></article>
به طور مختصر، XSS یک شیوه‌ی حمله‌ی سمت مشتری است که کدهای مخرب (که می‌توانند با جاوااسکریپت، وی‌بی اسکریپت یا غیره نوشته شده باشند) را در مرورگر کاربر اجرا می‌کنند. (توضیح از مترجم)

ترجمه‌ای از مقاله‌ی Artemix در Dev.to:

https://dev.to/artemix/htmlspecialchars-5dog