javascript - 通过 jQuery ajax 使用 Coldfusion 删除文件

标签 javascript jquery ajax coldfusion cfc

在模式中填充有关文件的数据后,我正在尝试删除图像文件。

我的 jQuery 看起来像这样:

const deleteMedia = () => {
    const url = '../../includes/delete-media.cfc?method=deleteMedia';
    $(document).on('click', '.confirm-delete', () => {
        const fileName = $('.modal-wrapper').find('.file-name').text();
        $.ajax({
            url,
            type: 'POST',
            data: 'fileName=' + fileName,
            dataType: 'json',
            success(data) {
                console.log(data);
            },
            error(status) {
                console.log(status.statusText);
            }
        });
        return false;
    });
};

export default deleteMedia;

还有我的 Coldfusion 文件 delete-media.cfc:

<cffunction name="deleteMedia" access="remote" returnType="any" returnformat="json">
    <cfargument name="fileName" >
    <cfset requestBody = toString( getHttpRequestData().content ) />
    <!--- Double-check to make sure it's a JSON value. --->
    <cfif isJSON( requestBody )>
        <cfset VARIABLES.DeleteFileName = deserializeJSON( requestBody )>
        <cffile
            action = "delete"
            file = "C:\pathToSite\img\#variables.DeleteFileName#"
        >
        <cfdump var="#variables.DeleteFileName#">
    </cfif>
</cffunction>

当我 checkin “网络”面板时,这会发送 fileName = fileName 作为数据,并返回 200,尽管我看不到 cfdump 的内容。

我对 FE 还不错,但对 CF 不太热衷,我的猜测是我的 CF 过于复杂,但也没有达到我希望的效果。我确实尝试引用了我不久前写的一些东西,加上这个:

How to use Ajax to pass Javascript variables to Coldfusion?

还有这个:

Passing and returning ColdFusion Structure via JQuery

有什么想法吗?

最佳答案

是的,您将文件名作为请求的一部分传递仍然存在问题。有人可以进入那里对您的文件造成严重破坏。您是否正在验证登录用户是否可以访问有问题的文件?如果他们传递别人文件的值怎么办?这似乎也容易受到路径遍历攻击。如果你传入`filename=../../someReallyImportantFile',它会被删除吗? owasp.org/www-community/attacks/Path_Traversal

如果这是个人网站而不是商业网站,则可能无需担心太多。如果这是客户的网站,我会更担心。

在 Windows 中,我在此处安装了 Steam:

`D:\Steam\`. 

我可以在 Windows 资源管理器中打开此路径:

`D:\Steam\bin`. 

我也可以打开这条路,

`D:\Steam\bin\..\config`

其中列出了D:\Steam\config

如果我到处钓鱼

`deleteFileName=..\..\Windows\some\folder\someFile` 

如果您的服务器权限未设置为阻止 CF 删除服务器上的任何内容,我也许能够从您的 Windows 目录中删除文件。

你的CF用户不应该是服务器的管理员帐户,有lockdown guides这可以帮助防止各种安全攻击。

理想情况下,您可以将文件列表存储在数据库表中,然后引用 FileID 作为删除请求参数。

$(document).on('click', '.confirm-delete', () => {
    $.ajax({
        url,
        type: 'POST',
        data: 'fileID=' + $('#SomeHiddenField').val(),
        success(data) {
            console.log(data);
            hideOverlay();
        },
        error(status) {
            console.log(status.statusText);
        }
    });
});

然后,在服务器上,在最好的情况下您进行验证

  • 用户是否已登录?
  • 他们有权访问此文件吗?
  • 他们有权删除此文件吗?
  • 删除物理文件
  • 将记录标记为已删除,并注明删除时间和删除人。

关于javascript - 通过 jQuery ajax 使用 Coldfusion 删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66830819/

相关文章:

javascript - API数据未显示在页面上

jquery - 最大高度不起作用

javascript - 比较两个数组并找到第二个数组中缺少的项目

javascript - 我的 Flimsy AJAX 文件上传出了什么问题?

javascript - 使用 jQuery 重新加载对象并间隔触发函数

javascript - Bootstrap table Js 中的 data-sort-name 是如何工作的?

Javascript/Thymeleaf 表按日期/时间排序,格式为 dd-MM-yyyy hh :MM:ss

php -laravel 如何从用户输入中保存自定义数据

javascript - 函数返回未定义、预期的 Promise 或值异步方法

jquery - 当出现某些文本时隐藏 <h2> 的内容 - JQuery