付费课程, 订阅后即可观看

防止别人遍历爬取数据,UUID 以及 ULID 应用时需要特别注意的事项

本期 Laravel Security 数据安全视频课程咱们介绍一下 Laravel 开发时需要注意的安全问题,本期咱们探讨如何防止别人遍历爬取我们的数据,UUID 以及 ULID 应用时需要特别注意的事项
熊松 2023.06.26 14:25

老师,为什么级联删除$table->cascadeOnDelete();总是不行?搞了一个晚上,chatgpt都没帮我找到问题。只好请教老师。

1.mysql,默认引擎InnoDB;

2.Laravel与数据库连接配置没问题,数据增删改查都正常, User::find(1)->articles()->get()都没问题,就是不能级联删除:

User::find(1)->delete()

比如在tinker执行上面语句,就只能把user删了,user关联的article,删不了。

3. claude说要用cascadeOnDelete就必须使用软删除,chatgpt告诉我不必使用软删除。我在两个模型上加上软删除或者不加,都还是不能使用级联删除cascadeOnDelete。

article的migration:

public function up(): void
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->onUpdate('cascade')->onDelete('cascade');
            $table->string('title');
            $table->timestamps();
            $table->softDeletes();
        });
    }

user的migration:

  public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
            $table->softDeletes();
        });
    }

本来是用ulid顺带试试的,发现无法级联删除,换成id也不行。看来也不是ulid的原因。

国营 2023.07.03 08:34

这两周孩子病了,没有处理大家的问题,非常抱歉。希望这个问题你已经解决了,并不需要软删除,你的用法也没啥问题,有时候会跟具体的数据库版本有关,而且虽然数据库提供了这个功能,真正实现的时候建议不要用,删除逻辑宁可自己多写点代码,这样可以更好的掌控,这也是所有成熟公司普遍采取的策略。再比如字段设计的时候,我基本都允许 nullable,这样也是为了增加灵活性和扩展空间,最后祝顺利。

熊松 2023.07.03 09:10

了解了,谢谢老师的解答。后面换台电脑就可以了,mysql版本都是一样的,还没找到原因哈哈哈。

只买了老师的课程,又没额外买1v1的服务,老师抱歉个啥,祝全家安康~

国营 2023.07.03 08:37

另外我个人的建议是今后再遇到类似问题,不要这么折腾,会浪费大量时间精力,因为这类问题对于人的技术能力,逻辑能力带不来什么帮助和提升,要果断跳过,毕竟自己可以通过其他方式实现这个功能。

微信扫码登录