index.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <!DOCTYPE html>
  2. <head>
  3. <!-- <link async rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
  4. integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> -->
  5. <script type="text/javascript" src="../js/jquery.min.js" crossorigin="anonymous"></script>
  6. <link rel="stylesheet" href="../css/bootstrap.min.css" crossorigin="anonymous">
  7. <script type="text/javascript" src="../js/bootstrap.min.js" crossorigin="anonymous"></script>
  8. <link rel="stylesheet" href="../css/style.css">
  9. <link rel="preconnect" href="https://fonts.gstatic.com">
  10. <link href="https://fonts.loli.net/css2?family=Anonymous+Pro:ital,wght@0,400;0,700;1,400;1,700
  11. &family=Noto+Serif+SC:wght@300;400;500;600;700&display=swap" rel="stylesheet">
  12. <title>日志</title>
  13. <style>
  14. * {
  15. transition-duration: 300ms;
  16. }
  17. .btn {
  18. text-shadow: rgb(85, 85, 85) 3px 2px 4px;
  19. display: inline-block;
  20. }
  21. .btn-xs.gee {
  22. background-color: rgb(70, 59, 150);
  23. color: white;
  24. }
  25. .btn-info.gee {
  26. color: #fff;
  27. background-color: #027396;
  28. border-color: #46b8da;
  29. }
  30. code.gee {
  31. background-color: rgb(70, 59, 150);
  32. }
  33. .noshadow {
  34. text-shadow: none;
  35. }
  36. .gee ::selection {
  37. color: white;
  38. text-decoration: underline wavy #FF3028;
  39. text-shadow: 1px 1px 2px red, 0 0 1em blue, 0 0 0.2em blue;
  40. background-color: black;
  41. }
  42. .gee {
  43. color: white;
  44. background-color: black;
  45. }
  46. .btn-dang {
  47. transition-duration: 1000ms;
  48. }
  49. .btn-dang.gee {
  50. outline: 10px transparent
  51. }
  52. .btn-dang:is(:hover, :hover:focus) {
  53. outline: 15px solid rgba(58, 58, 58, 0.8)
  54. }
  55. .btn-dang.gee:hover {
  56. outline: 4000px solid rgba(0, 0, 0, 0.1)
  57. }
  58. .btn-dang:is(:hover:active:focus, :active) {
  59. scale: 80%;
  60. transform: translate(-7px, -7px);
  61. outline: 150px double rgba(162, 6, 6, 0.5)
  62. }
  63. </style>
  64. <script>
  65. $().ready(function () {
  66. $('.btn-danger').on('click', function (e) {
  67. $('body,.btn,.btn-xs,code').toggleClass('gee')
  68. console.log(e)
  69. })
  70. })
  71. </script>
  72. </head>
  73. <body>
  74. <a class="btn btn-info" href="/"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>&nbsp;返回</a>
  75. <div class="page-header">
  76. <h1>网站日志</h1>
  77. </div>
  78. <h3>
  79. 2022.12.17
  80. <small><a href="https://greasyfork.org/zh-CN/scripts/456705-wangshaui-simulator">TamperMonkey</a></small>
  81. </h3>
  82. <p>写了个集修改 localStorage,替换 javascript,伪造老师身份于一身的用户脚本,但技术能力有限,还得要用户手动屏蔽原来的 javascript。</p>
  83. <p>给图表加上了令人舒适的自适应窗口变化功能。</p>
  84. <p>准备写各科的分析,现在能拿到接口数据了,还得研究怎么处理。</p>
  85. <p>为了方便调试,把心意答接口的加密过程硬编码了一下,以后就可以直接从<a href="/crypty-2">这里</a>处理了。</p>
  86. <hr>
  87. <h3>
  88. 2022.12.16
  89. <small><a href="http://36.112.23.77/">36.112.23.77</a></small>
  90. </h3>
  91. <p>这个心意答,简直就是活靶子,循循善诱地让人把他完全攻破。</p>
  92. <p>它还有个合适的难度曲线,从未加密的接口里偷数据,到双向加密的接口进行解密,到伪造 cookie 和 localStorage,再到骗过虚假的 uuid 验证,每一步都能放出刺激而又吓人的新信息。</p>
  93. <p>我们只能期望,不要有太多人来想着攻击这些接口,不然来一个攻破一个,到时候大家的成绩都成公开的秘密了。</p>
  94. <p>我们说它蠢事做尽,还好它坏事没做到底,至少阅卷的权限还握在登陆验证手里。可是,既然会登陆验证了,其他各种东西,如每次考试的成绩单、详细的分析,这些却都完全不需要登陆验证。只要在客户端合适的位置写好老师的校园号(可以从校园邮箱里检索),再模仿网页进行加密,或是直接篡改网页的 javascript,你就得到了老师的身份,全校所有人的各种信息都暴露无遗。</p>
  95. <p>它在加密上也完全没有用心,只草草加了一层 base64 和 AES,密码竟然明文放在 javascript 文件里,加密函数的名称也没有混淆。而且,这样危险的接口完全不是这么加密来的吧!理应在每个有敏感信息的接口都放上登陆验证,这才能体现出对学生隐私的重视。<b>问题出在哪儿?问题就出在开发者犯懒。</b></p>
  96. <p>话又说回来,要是它加上了登陆验证,我还怎么偷你们的成绩呢??也许我可以学学机房大佬,用易语言开发一个木马,然后把老师的账号密码偷过来。或者远程控制老师的电脑,用惊悚图片把老师吓跑,再趁机操作他的帐号。</p>
  97. <hr>
  98. <h3>
  99. 2022.12.14
  100. <small><a href="/score">score</a><a href="/blog">blog</a></small>
  101. </h3>
  102. <p>今天的发现特别离谱。</p>
  103. <p>心意答查询成绩的接口只经过了一层双向加密,没有丝毫验证身份的手段,并且返回的数据也多于显示的数据,结果就是只要知道考试编号、科目编号和数字校园号就能直接查到这个人,以及他的班级详尽的成绩。</p>
  104. <p>更有甚者,在线学习平台直接放出了全年级所有人的姓名和数字校园号的对照表,以至于只要知道姓名就能查出成绩来。</p>
  105. <p>以及,它返回信息的模式属于能返则返,也就是说我不知道科目编号,可以直接放两百个进接口里,它还自动筛选出存在的科目编号;不知道考试编号也能一个一个试出来:就算考试和校园号完全对不上,它也会返回考试名称。对我们这些<i>阴险的窃取者</i>来说,这简直是太方便了。
  106. </p>
  107. <p><b>只需要知道一个姓名,你历次考试的成绩就全都查出来,这就是信息泄露的危害...</b></p>
  108. <p>查成绩的接口,这样的安全性不能说离谱,只能说是离谱至极。</p>
  109. <p>除此之外,今天还把博客通过暴力粘贴的方式搬运过来了。</p>
  110. <hr>
  111. <h3>
  112. 2022.12.13
  113. <small><a href="/chem">chem</a>/add</small>
  114. </h3>
  115. <p>实现了添加化学式的操作,往里加了几个式子,但是对删除操作的处理非常纠结,因为 MySQL 的自增主键是不受删除影响的,删除一个元素后仍然占用着这个编号。</p>
  116. <p>倒也有解决办法,就是强制覆盖自增的位置,但这样很难应对在序列中间删除的情况,所以删除功能基本是不会上线了,只能由我在后台自己维护。</p>
  117. <hr>
  118. <h3>
  119. 2022.12.12
  120. <small><a href="/chem">chem</a>/query</small>
  121. </h3>
  122. <p>实现了对数据库中化学方程式的查询,虽然目前数据库里只放了两个式子,但等我实现添加功能后会往里加的。</p>
  123. <p>大量运用了正则表达式(没有你我活不了啊!)。</p>
  124. <p>认识到了 SQL 注入的危害,并用简陋的手段做了防护。</p>
  125. <hr>
  126. <h3>
  127. 2022.12.11
  128. <small>release</small>
  129. </h3>
  130. <p>折腾了半天,总算把网站放到公网上了。</p>
  131. <p>为了方便,我大致梳理一下,原先只是在 <a href="http://schtonn.github.io/">schtonn.github.io</a><a
  132. href="http://schtonn.gitee.io/">schtonn.gitee.io</a> 上写博客,随后把实现的几个小功能拉起来拼凑了个页面。</p>
  133. <p>后来gitee停止服务了,我又想学习学习后端开发,所以目前网站在 <a
  134. href="http://43.143.233.184/">http://43.143.233.184/</a>,应该会保持更新,不过暂时还没有购置域名的打算。</p>
  135. <hr>
  136. <h3>
  137. 2022.12.4
  138. <small>dark</small>
  139. </h3>
  140. <p>在首页加上了黑暗模式,以及非常愚蠢的秘密消息(其实更多是对 Bootstrap 响应式布局的测试)。</p>
  141. <p>进一步完善按钮样式。</p>
  142. <hr>
  143. <h3>
  144. 2022.12.3
  145. <small><a href="/chem">chem</a></small>
  146. </h3>
  147. <p>把化学式配平、相对质量计算的网页实现出来了,接下来还要加上 MySQL 的上传。</p>
  148. <p>为所有按钮加上了好玩的悬浮样式。这可真不容易,为了去掉浏览器自带的丑陋黑色边框,我进行了不懈的斗争,最后发现是除了 <code>:focus</code><code>:active</code> 选择器,还得写上
  149. <code>:focus:active</code>
  150. </p>
  151. <button class="btn btn-info">看看</button>&nbsp;&nbsp;&nbsp;&nbsp;
  152. <button class="btn btn-info"
  153. style="outline: 10px double rgba(95, 177, 221, 0.5);">悬浮</button>&nbsp;&nbsp;&nbsp;&nbsp;
  154. <button class="btn btn-info" style="outline: 5px dashed rgba(95, 177, 221, 0.5);">聚焦</button>
  155. <hr>
  156. <h3>
  157. 2022.12.2
  158. <small>MySQL</small>
  159. </h3>
  160. <p>近日研究了 Bootstrap 框架很多不错的设计,如按钮组团等,进行了应用。</p>
  161. <p>今天开始尝试在本地搭建 MySQL 数据库。希望是日后能建起一个存放中学化学式的数据库。</p>
  162. <hr>
  163. <h3>
  164. 2022.11.30
  165. <small>WebSocket</small>
  166. </h3>
  167. <p>有了小崔给的主机,开辟了很多新领域。</p>
  168. <p>不用暴力地琢磨纯静态页面了,可以开始自己开发网页后端。刚起步,先用 Node.js+Express 做后端。写了个配平化学式的接口(<a class="btn-xs btn-default noshadow"
  169. href="/chemist?H2+O2=H2O">/chemist?H2+O2=H2O</a>)。</p>
  170. <p>用 WebSocket 可以实现服务器与客户端的即时通讯,原先搭载在 LeanCloud 上的五子棋计算部分可以迁移到本地了。</p>
  171. <hr>
  172. <p>开始记录。</p>
  173. <hr>
  174. <p><button class="btn btn-danger btn-dang"><span class="glyphicon glyphicon-off" aria-hidden="true"></span></button>
  175. </p>
  176. </body>
  177. </html>