Xuxuan #48

Merged
xuxuan merged 6 commits from Xuxuan into master 2022-11-08 15:24:36 +08:00
Collaborator
There is no content yet.
xuxuan added 4 commits 2022-10-12 14:19:26 +08:00
mrlan reviewed 2022-10-13 09:26:28 +08:00
@ -9,3 +9,3 @@
// 修改这一行设置你的文件下载目录
// IMPORTANT: Do not delete the following conditional test
if (strpos($_GET['file'], "../") != false) { // 检查是否有 ../,防止用户构造路径,访问某个他不应该访问的目录
if (strpos($_GET['file'], "../") !== false) { // 检查是否有 ../,防止用户构造路径,访问某个他不应该访问的目录

@xuxuan

我理解了。当 '../' 是在最左边位置时,strpos 返回 0, 而 0 != false 是不成立的, 所以不会 die("Sorry. Nothing to download.");

改正后,0 !== false 成立。

https://www.php.net/manual/en/function.strpos.php 中的Example#1, Example#2 说明了这个问题。

Hui

@xuxuan 我理解了。当 `'../'` 是在最左边位置时,strpos 返回 0, 而 `0 != false` 是不成立的, 所以不会 `die("Sorry. Nothing to download.")`; 改正后,`0 !== false` 成立。 https://www.php.net/manual/en/function.strpos.php 中的Example#1, Example#2 说明了这个问题。 Hui
mrlan marked this conversation as resolved
mrlan reviewed 2022-10-13 09:38:41 +08:00
@ -11,2 +11,2 @@
$token=$_GET['token'];
$email=$_GET['email'];
$token=htmlspecialchars($_GET['token']);
$email=htmlspecialchars($_GET['email']);

@xuxuan

多谢。

htmlspecialchars 将特殊字符转化为 HTML entities。 要不要设置 ENT_QUOTES 选项, 将引号也转化一下?

还有, 是不是要把程序中所有出现过 $_GET 的地方, 都包上 htmlspecialchars 调用?还是只有在变量用于SQL语句时才需要?

Hui

@xuxuan 多谢。 [htmlspecialchars](https://www.php.net/manual/en/function.htmlspecialchars.php) 将特殊字符转化为 HTML entities。 要不要设置 ENT_QUOTES 选项, 将引号也转化一下? 还有, 是不是要把程序中所有出现过 `$_GET` 的地方, 都包上 `htmlspecialchars` 调用?还是只有在变量用于SQL语句时才需要? Hui
Poster
Collaborator

htmlspecialchars的作用是防止xss,主要是将<(小于号)变为&lt;和>(大于号)变为&gt; 防止输入html标签,在可能存在xss的地方使用就可以了

htmlspecialchars的作用是防止xss,主要是将<(小于号)变为\&lt;和>(大于号)变为\&gt; 防止输入html标签,在可能存在xss的地方使用就可以了

@xuxuan

今天上课展示后我懂多了。

就是如果不加 htmlspecialchars 转义, 学生可以通过在重新改分理由中构造 script 语句,将该语句存入 LRR 数据库, 等老师查看重新改分理由时, 将老师的cookies发送到指定位置。这种攻击叫做 Stored XSS。我的理解对吗?

Hui

@xuxuan 今天上课展示后我懂多了。 就是如果不加 htmlspecialchars 转义, 学生可以通过在重新改分理由中构造 script 语句,将该语句存入 LRR 数据库, 等老师查看重新改分理由时, 将老师的cookies发送到指定位置。这种攻击叫做 Stored XSS。我的理解对吗? Hui
mrlan reviewed 2022-10-13 09:39:09 +08:00
@ -249,3 +249,3 @@
// Password Update
$hashed_password = hash('sha512', $password);
$sql = "UPDATE users_table set HashPassword='$hashed_password' where User_ID=$userid;";
$sql = "UPDATE users_table set HashPassword='$hashed_password' where User_ID='$userid';";

@xuxuan

多谢,加上单引号的作用是啥?

Hui

@xuxuan 多谢,加上单引号的作用是啥? Hui
Poster
Collaborator

通过mysqli_real_escape_string防止sql注入的原因是其会将一些特殊符号转义,例如将输入的'转义为\',从而防止sql注入。拼接的变量没有被单引号或双引号包裹mysqli_real_escape_string也就失去了作用

通过mysqli_real_escape_string防止sql注入的原因是其会将一些特殊符号转义,例如将输入的'转义为\\',从而防止sql注入。拼接的变量没有被单引号或双引号包裹mysqli_real_escape_string也就失去了作用

@xuxuan

Thanks

如果对所有的SQL变量,先使用下面链接中的 check_input 函数(见“预防数据库攻击的正确做法”),可以预防SQL注入问题吗?

https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp

Hui

@xuxuan Thanks 如果对所有的SQL变量,先使用下面链接中的 `check_input` 函数(见“预防数据库攻击的正确做法”),可以预防SQL注入问题吗? https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp Hui
Poster
Collaborator

在数据库编码不为中文的情况下是可以的,除了对输入做check_input处理,对数据库中取出来的数据同样也要进行check_input

在数据库编码不为中文的情况下是可以的,除了对输入做check_input处理,对数据库中取出来的数据同样也要进行check_input
xuxuan added 1 commit 2022-10-13 19:53:52 +08:00

@xuxuan

下次上课时问问你一些细节,然后再合并。
Thanks

@xuxuan 下次上课时问问你一些细节,然后再合并。 Thanks
mrlan added 1 commit 2022-10-25 16:43:48 +08:00

@xuxuan

关于xss漏洞的原理与一些补充说明.pdf中第7-8页提到的问题,有解决方法吗?

用函数 str_replace 直接替换掉 script ?

-蓝珲

@xuxuan 关于xss漏洞的原理与一些补充说明.pdf中第7-8页提到的问题,有解决方法吗? 用函数 [str_replace](https://www.w3school.com.cn/php/func_string_str_replace.asp) 直接替换掉 script ? -蓝珲
Poster
Collaborator

@xuxuan

关于xss漏洞的原理与一些补充说明.pdf中第7-8页提到的问题,有解决方法吗?

用函数 str_replace 直接替换掉 script ?

-蓝珲

xss不一定需要使用script标签
例如
<img src=0 onerror=alert(1)>
有防御xss更好的方法是使用csp策略

> @xuxuan > > 关于xss漏洞的原理与一些补充说明.pdf中第7-8页提到的问题,有解决方法吗? > > 用函数 [str_replace](https://www.w3school.com.cn/php/func_string_str_replace.asp) 直接替换掉 script ? > > -蓝珲 xss不一定需要使用script标签 例如 `<img src=0 onerror=alert(1)>` 有防御xss更好的方法是使用csp策略
xuxuan merged commit 74a8a68ee9 into master 2022-11-08 15:24:36 +08:00
xuxuan referenced this issue from a commit 2022-11-08 15:24:36 +08:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: mrlan/LRR#48
There is no content yet.