57. Secret و Constant در REST
GraphBPMS Provider در وضعیت جاری، نوع جداگانهای با مفهوم Secret/Vault برای Parameterهای REST ندارد. Parameterها همان Parameterهای معمولی هستند و Constant/Default Value نیز یک مقدار Static ذخیرهشده در Provider است.
بنابراین این دو سناریو باید از هم تفکیک شوند:
Client مقدار را ارسال میکند
→ همان مقدار برای Parameter استفاده میشود
Client مقدار مؤثر ارسال نمیکند
+ Provider برای Parameter مقدار Default دارد
→ مقدار Default ذخیرهشده در Provider استفاده میشود
نمونه نامناسب برای Credential حساس در Client:
absoluteMethodHelper.runProvider(
PROVIDER_ID,
[
{
name: 'Authorization',
value: 'Bearer REAL_SECRET'
}
]
);
این مقدار بهعنوان داده Client-Side قابل مشاهده است و ممکن است در Logging پارامترهای Provider نیز ثبت شود.
قرار دادن همان مقدار بهعنوان Constant/Default در Provider باعث میشود Client مجبور نباشد آن را در هر Call ارسال کند، اما آن را به Secret محافظتشده تبدیل نمیکند.
در این حالت مقدار Default بهصورت Static در اطلاعات Provider در Database نگهداری میشود و فقط زمانی جایگزین مقدار اجرا میشود که برای Parameter مقدار مؤثری ارسال نشده باشد.
58. Output حساس
Providerهایی که به جدول User یا Security متصل میشوند نباید بیدلیل فیلدهای حساس برگردانند.
از خروجی دادن مواردی مانند:
Password
Private Key
Security Stamp
Token
Connection String
خودداری شود.
اصل پیشنهادی:
Least Data
فقط ستونهایی را Select کنید که Consumer واقعاً نیاز دارد.
59. SQL Injection
Query را با الحاق مستقیم مقدار کاربر نسازید.
بد:
const query =
"SELECT * FROM Users WHERE Name = '" +
userValue +
"'";
بهجای آن در Provider از Parameter استفاده کنید:
WHERE Name = @Name
و در Client:
{
name: 'Name',
value: userValue
}
ارسال شود.