CSRF 保护(如果表单标记不存在)

CSRF protection if form tag not present

提问人:NewbieHere 提问时间:11/3/2023 最后编辑:Andrew MortonNewbieHere 更新时间:11/3/2023 访问量:14

问:

我们有一个页面,里面有一堆单选输入字段和一个按钮。单击按钮后,将使用 javascript 添加所选单选机的值。window.location.href

我们是否需要在这里应用任何 CSRF 保护?没有这样的表单标记。如果是,那么如何申请?

HTML -

<div>
    <div class="component-content">
    <div class="component-row">             
    <div class="listbox">
    <input type="radio" id="91820000" value="1" name="user-programs" class="listbox__input"           onclick="ProgramSelection.selectRadio()">
    <label for="1" class="listbox__input__label">
                            Program 1                               </label>
    <input type="radio" id="2" value="2" name="user-programs" class="listbox__input"   onclick="ProgramSelection.selectRadio()">
    <label for="2" class="listbox__input__label">
                           Program 2                                </label>
    <input type="radio" id="3" value="3" name="user-programs" class="listbox__input" onclick="ProgramSelection.selectRadio()">
    <label for="3" class="listbox__input__label">
                            Program 3 
    </label>
    <input type="radio" id="4" value="4" name="user-programs" class="listbox__input"  onclick="ProgramSelection.selectRadio()" checked="checked">
    <label for="4" class="listbox__input__label">
                           Program 4                  </label>
    <input type="radio" id="5" value="5" name="user-programs" class="listbox__input" onclick="ProgramSelection.selectRadio()">
    <label for="5" class="listbox__input__label">
                         Program 5                             
    </label>
    </div>
    </div>   
    <button class="selection-button" type="button" onclick="ProgramSelection.submitSelection()">
                Select</button>
    </div>
</div>`
//javascript
ProgramSelection.submitSelection = function() {
    var redirectPath = document.querySelector('#redirect-url');
    var account = document.querySelector('input[name="user-programs"]:checked');
 
    var redirectUrl = redirectPath.value + "/login?program_id=" + account.value;
    window.location.href = redirectUrl;
}
安全 CSRF

评论


答:

0赞 Quentin 11/3/2023 #1

我们是否需要在这里应用任何 CSRF 保护?

那要看情况。

如果恶意网站提供了指向用户单击的同一 URL 的链接,会发生什么情况?

  • 有什么作用吗?(而不仅仅是检索信息)
    • 进行银行交易
    • 在网站上发表评论
    • 触发 IoT 设备打开灯
  • 它是否使用用户的凭据来确保只有允许执行该操作的人才能执行此操作?

如果这两个问题的答案都是“是”,那么你绝对需要 CSRF 保护。(您还应该将其更改为 POST 请求,因为 GET 请求应该是安全的)。

没有这样的表单标记。如果是,那么如何申请?

就好像你有一个表格一样。

在请求中包含令牌。只需将其放在您正在生成的 URL 中,而不是使用隐藏的表单字段。