呃。。最近从这个submission开始,陆续有不少人通过交互题中交互库的漏洞来骗取AC。
在UOJ 328交互库出漏洞之后,其他的一些交互题的库也陆续爆出漏洞:这里和这里。
(后一个提交记录是我小号。。我抱着试试看的心态玩了玩没想到APIO2016这样的正规比赛交互库也会出漏洞(或者是uoj管理员配置得不好?
怎么说呢。。一方面大家做题的时候不能总是抱着戏耍交互库的心态做题,另一方面出题人们也要尽量保证交互库不被cha掉。。(出交互题真难啊)
关于怎么加强安全性,我目前还没有很明确的想法。。欢迎大家提建议。。也希望uoj上的交互题能越出越好>_>
想法1:在输出文件的开头输出一个保密的字符串(比如说交互库内部的一个很长的随机串),选手不知道该字符串就无法伪装交互库的输出。这个想法有两个弱点:一是不能防止这种骗输入的情况;二是这个串要非常长(uoj的输出可以看到前100b来着?)或者交互题就不能查看输出。
想法2:加密输入。最好真实数据的输入格式跟题面描述中的不同。这样应该可以防止骗输入,但是又带来了不能hack的问题。如果要允许hack,那可能还需要出题人写一个将hack数据加密的程序,不知道uoj能否实现这样的功能?
想法3:对于牵扯到随机性的题,随机种子最好自己写而不是使用系统库的(其实这是个教训,见这里