信頼境界
外部文字列、ファイル、APIレスポンスはString型であるだけでは正しいデータと保証されません。外部から内部へ入る地点で形式・範囲・意味を検証します。
struct UserId(u64);
impl TryFrom<&str> for UserId{
type Error=std::num::ParseIntError;
fn try_from(s:&str)->Result<Self,Self::Error>{Ok(UserId(s.parse::<u64>()?))}
}
検証済みの値を専用型に包むと後続処理の前提が明確になります。入力検証と権限確認は別です。
- SQLは文字列連結せずパラメーター化クエリを使う
- HTML出力は文脈に合ったエンコードを行う
- パスは許可した基準ディレクトリ内か確認する
- 入力長・件数・処理時間に上限を設ける
演習:IDの検証
コード提出フォーム
RUST安全なサーバー側採点連携が未接続のため、現在は提出できません。
採点基盤準備中
公開テストケース
読み込み中…